Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    170

    [C#] lanciare exe in automatico

    salve a tutti
    non so se questo è il luogo giusto
    ho creato un exe in C# che legge dati da un file csv e memorizza le informazioni in un un database (sql server 2008)
    i file in questione arrivano sul server a cadenza giornaliera; ora io dovrei 'automatizzare' il programma e farlo eseguire ogni giorno ad una determinata ora.
    detto chiaro e tondo, non so dove mettere le mani...al meno l'exe in questione, quando lo lancio 'a mano' fa il suo lavoro correttamente...

    grazie e saluti

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    ciao,
    la soluzione si chiama : "operazioni pianificate di windows", oppure, se vuoi complicarti un pochino (ma mica tanto eh! ) la vita, devi creare un servizio che traduce il tempo stabilito per l'operazione (ad esempio tutti i gg alle 23) in millisecondi per un timer con la differenza dal momento dell'avvio del servizio alle 23, quindi far partire il timer, una volta effettuata l'operazione (alle 23), reimposti il timer sempre nello stesso modo dentro il metodo chiamato dal timer (sempre con la differenza in millisecondi dall'orario attuale alla scadenza), in caso di chiusura del computer, alla riapertura ritorna al primo calcolo e così via.
    Ora il punto è : Avresti un buon motivo per non usare le operazioni pianificate e fare tutto sto pseudocasino?


    ciao.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    170
    molte grazie!
    in effetti, la prima soluzione è più easy!!!!

    grazie assai e a buon rendere

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    figurati.


  5. #5
    ciao, la soluzione si chiama : "operazioni pianificate di windows", oppure, se vuoi complicarti un pochino (ma mica tanto eh! ) la vita, devi creare un servizio che traduce il tempo stabilito per l'operazione (ad esempio tutti i gg alle 23) in millisecondi per un timer con la differenza dal momento dell'avvio del servizio alle 23, quindi far partire il timer, una volta effettuata l'operazione (alle 23), reimposti il timer sempre nello stesso modo dentro il metodo chiamato dal timer (sempre con la differenza in millisecondi dall'orario attuale alla scadenza), in caso di chiusura del computer, alla riapertura ritorna al primo calcolo e così via. Ora il punto è : Avresti un buon motivo per non usare le operazioni pianificate e fare tutto sto pseudocasino? ciao.
    Mi permetto di fare un appunto in quanto ho appena sviluppato un'applicazione simile. Per lanciare l'exe ad un orario stabilito puoi sfruttare anche il timer volendo.

    Lo imposti con cadenza ad ore e ad ogni tick veirfichi quanto segue:
    codice:
    if (Int32.Parse(DateTime.Now.Hour.ToString()) == 22) 
    {
       Lanci l'exe
    }
    In questo modo puoi anche chiudere e riavviare il programma senza preoccuparti del riavvio del timer che ad ogni ora fa il suo controllo.

    Ciao
    Alle anime superficiali occorrono degli anni per liberarsi di un’emozione. L’uomo padrone di sè pone fine a un dolore con la stessa facilità con la quale improvvisa una gioia.

  6. #6
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Originariamente inviato da jlocke2010
    Mi permetto di fare un appunto in quanto ho appena sviluppato un'applicazione simile. Per lanciare l'exe ad un orario stabilito puoi sfruttare anche il timer volendo.

    Lo imposti con cadenza ad ore e ad ogni tick veirfichi quanto segue:
    codice:
    if (Int32.Parse(DateTime.Now.Hour.ToString()) == 22) 
    {
       Lanci l'exe
    }
    In questo modo puoi anche chiudere e riavviare il programma senza preoccuparti del riavvio del timer che ad ogni ora fa il suo controllo.

    Ciao
    Ciao, anche questa potrebbe essere una soluzione, se non fosse che hai uno spreco di risorse, non hai un orario preciso (se lo vuoi alle 23:00 ad esempio, rischi che se il programma è stato avviato alle 10:59, il timer scatterà solo alle 23:59), senza considerare che se non fai un servizio, nel caso in cui l'utente non acceda al login (ad esempio sui server capita spesso) il programma non funzionerà (non parte senza login...).

  7. #7
    codice:
    non hai un orario preciso (se lo vuoi alle 23:00 ad esempio, rischi che se il programma è stato avviato alle 10:59, il timer scatterà solo alle 23:59)
    Ciao,
    questo non si verifica in quanto viene verificata solo l'ora. Quindi anche le 23:59 danno un esito positivo sull'if.

    E' vero sia lo spreco di risorse (ma qui bisogna vedere la tipologia di software) e sia il login. D'altra parte bisogna considerare anche la tipologia di utenza, se devi fornire un prodotto indipendente non è pensabile far utilizzare le operazioni pianificate. Come dire, bisogna sempre fare le opportune valutazioni
    Alle anime superficiali occorrono degli anni per liberarsi di un’emozione. L’uomo padrone di sè pone fine a un dolore con la stessa facilità con la quale improvvisa una gioia.

  8. #8
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Originariamente inviato da jlocke2010
    codice:
    non hai un orario preciso (se lo vuoi alle 23:00 ad esempio, rischi che se il programma è stato avviato alle 10:59, il timer scatterà solo alle 23:59)
    Ciao,
    questo non si verifica in quanto viene verificata solo l'ora. Quindi anche le 23:59 danno un esito positivo sull'if.

    E' vero sia lo spreco di risorse (ma qui bisogna vedere la tipologia di software) e sia il login. D'altra parte bisogna considerare anche la tipologia di utenza, se devi fornire un prodotto indipendente non è pensabile far utilizzare le operazioni pianificate. Come dire, bisogna sempre fare le opportune valutazioni
    ciao, chiaramente bisogna capire cosa intendi per prodotto indipendente... indipendente dalla piattaforma? indipendente dalla configurazione manuale delle operazioni pianificate? indipendente dalle operazioni pianificate stesse?
    per la prima : bisogna valutare la piattaforma (in caso di servizio di avvio)...
    per la seconda : non sei legato alla configurazione manuale, esistono appositi oggetti per farlo da codice.
    per la terza : come detto prima, dipende dalla piattaforma, se si tratta di windows e vuoi fare una cosa indipendente dalle operazioni pianificate e professionale, allora si deve creare un servizio di windows.

    in ogni caso, ho paura che fare un sistema che ci si aspetti che lavori alle 23:00 e invece lavora alle 23:59, non è molto professionale, credo sia molto meglio scrivere qualche riga di codice in più per fornire un prodotto serio...

    mi spiego meglio su quest'ultimo punto :

    se sono le 10:59 e io avvio il programma (con il timer come dici tu ogni ora), il timer farà la sua prima chiamata alle 11:59, a questo punto, la variabile di confronto dell'orario corrisponderà alle 11 (DateTime.Now.Hour.ToString()) anche se sono praticamente le 12... quindi se io imposto l'orario alle 23:00, l'ultima chiamata del timer sarà alle 22:59 (quindi DateTime.Now.Hour.ToString() == 22) e la condizione sarà ancora a false... dovrò attendere la successiva chiamata (alle 23:59) per avere la condizione vera (DateTime.Now.Hour.ToString() == 23), traslando di fatto praticamente di un'ora (o poco meno) il lavoro che invece mi apettavo per le 23, e questo non è per nulla professionale.

    poi è solo un consiglio... ognuno è libero di fare come crede.


  9. #9
    Ti straquoto in pieno. Cioè sono pienamente d'accordo con quanto dici.

    Io ho dato una soluzione che ho adottato e l'ho postata parzialmente perchè io utilizzo esattamente questa formula:

    Intervallo del timer: 60000 (un minuto)

    Condizione:

    codice:
    if ((Int32.Parse(DateTime.Now.Hour.ToString()) == 23) && (Int32.Parse(DateTime.Now.Minute.ToString()) == 00))  
    {    
    //Operazione 
    }
    Questo lancia l'operazione alle 23 con lo scarto di un minuto il che è accettabile per il software progettato.

    Poi ripeto, essendo perfettamente d'accordo con te con quanto scritto sopra, dipende dal tipo di software.

    Io la soluzione l'ho implementata per avviare una classe che invia una semplice notifica mail sullo stato di alcuni record del DB.

    Ho preferito postare l'intero codice per dargli un senso compiuto.

    Ciao
    Alle anime superficiali occorrono degli anni per liberarsi di un’emozione. L’uomo padrone di sè pone fine a un dolore con la stessa facilità con la quale improvvisa una gioia.

  10. #10
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Originariamente inviato da jlocke2010
    Ti straquoto in pieno. Cioè sono pienamente d'accordo con quanto dici.

    Io ho dato una soluzione che ho adottato e l'ho postata parzialmente perchè io utilizzo esattamente questa formula:

    Intervallo del timer: 60000 (un minuto)

    Condizione:

    codice:
    if ((Int32.Parse(DateTime.Now.Hour.ToString()) == 23) && (Int32.Parse(DateTime.Now.Minute.ToString()) == 00))  
    {    
    //Operazione 
    }
    Questo lancia l'operazione alle 23 con lo scarto di un minuto il che è accettabile per il software progettato.

    Poi ripeto, essendo perfettamente d'accordo con te con quanto scritto sopra, dipende dal tipo di software.

    Io la soluzione l'ho implementata per avviare una classe che invia una semplice notifica mail sullo stato di alcuni record del DB.

    Ho preferito postare l'intero codice per dargli un senso compiuto.

    Ciao



Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.