2013-06-06 6 views
12

Ho un'applicazione WPF pianificata in Utilità di pianificazione.Come si notifica l'Utilità di pianificazione di Windows quando l'applicazione non riesce?

Desidero notificare l'Utilità di pianificazione quando l'applicazione non riesce.

Nella finestra dell'Utilità di pianificazione, nella sezione Task Status nella colonna Run Result, ottengo sempre Success, anche quando l'applicazione genera un'eccezione interna.

Ho utilizzato Application.Current.Shutdown(1) in un tentativo di notificare un errore all'utilità di pianificazione, ma con I non ha avuto esito positivo.

Come si può fare?

+0

Hai provato a uscire con un codice di ritorno diverso da quello predefinito 0? Vedi http://stackoverflow.com/questions/155610/how-do-i-specify-the-exit-code-of-a-console-application-in-net – hatchet

+1

Sì, ho provato ma ho sempre successo. –

+0

possibile duplicato di [In che modo l'Utilità di pianificazione di Windows in Win7 riconosce un'attività non riuscita?] (Http://stackoverflow.com/questions/1335551/how-does-windows-task-scheduler-in-win7-recognize-a-failed -task) – Gabrielius

risposta

13

È necessario specificare un codice di uscita diverso dal valore predefinito 0 (che significa successo). È possibile farlo utilizzando

Environment.Exit(someNumber) 

Environment.Exit

Si avrebbe bisogno di avere un gestore di eccezioni globale per fare questo per le eccezioni non gestite fanno altrimenti. Questo post del blog fornisce ulteriori dettagli: http://jrich523.wordpress.com/tag/task-scheduler/

EDIT

ho fatto un presupposto che il problema era nella vostra applicazione. Sai cosa dicono delle ipotesi. Il problema, si scopre è nella progettazione di Task Scheduler. Come sottolineato qui:

How does Windows Task Scheduler in Win7 recognize a failed task?

che ho verificato in fase di test

la pianificazione di Windows non esaminare il codice di uscita o qualsiasi altro valore quando il compito viene completata. È necessario gestire qualsiasi errore durante l'elaborazione di all'interno del proprio script o programma.

Se si guarda nella cronologia per l'attività pianificata, è necessario visualizzare due eventi e Azione completata, seguita da un'attività completata. Se si esamina l'azione completata, dovrebbe essere simile a questa:

Utilità di pianificazione attività completata con successo "\ test4", esempio "{a41adae0-a378-45f6-AADC-648d27852042}", l'azione "C : \ blah..blah \ Release \ WpfApplication1.exe" con codice di ritorno 55.

Come si può vedere, l'applicazione uscito con un codice di ritorno, ma Utilità di pianificazione, dice ancora il successo. L'unica soluzione che vedo è gestirla da solo facendo clic con il pulsante destro del mouse sulla voce della cronologia e selezionando "Collega attività a questo evento ...".

Oppure, è possibile eseguire l'applicazione da un file batch e fare in modo che il file batch esamini il codice di uscita e agisca di conseguenza. Dovresti quindi utilizzare l'Utilità di pianificazione per pianificare il file batch invece di pianificare direttamente l'applicazione WPF.

Per quanto riguarda la restituzione di un codice di uscita dall'app WPF, potrebbe essere necessario fare clic con il pulsante destro del mouse sulle proprietà del progetto in Visual Studio e, nella scheda Applicazioni, selezionare Applicazione console per Tipo di output. Inoltre, utilizzare una build di rilascio in Utilità di pianificazione piuttosto che una build di debug per garantire che venga utilizzato il codice di uscita dell'applicazione, non qualcosa generato dal materiale di debug aggiunto. È possibile verificare per vedere se la vostra applicazione è correttamente generando un codice di uscita rendendo questo piccolo file batch nella stessa cartella del file exe ed eseguirlo (sostituendo il nome del file exe del vostro app):

wpfapplication1.exe 
echo %errorlevel% 
pause 

tuo codice originale può impostare correttamente il codice di uscita, ma Shutdown è un'uscita più delicata, e potrebbe non uscire immediatamente (o affatto), poiché attenderà che i thread e così via escano con grazia. Environment.Exit uscirà più energicamente.

+0

Ho provato, ma ho ancora successo. –

+0

@AlexandrePerez - scusa per la mia risposta iniziale incompleta. Vedi la mia recente modifica. – hatchet

+10

Non capisco perché l'Utilità di pianificazione di Windows non rispetti il ​​valore restituito dal programma in esecuzione! – kaptan