2013-06-06 16 views
12

Mam zaplanowaną aplikację WPF w Task Scheduler.Jak powiadomić program Windows Task Scheduler, gdy moja aplikacja ulegnie awarii?

Chcę powiadomić Harmonogram zadań, gdy aplikacja nie powiedzie się.

W oknie Harmonogramu zadań w sekcji Task Status w kolumnie Run Result zawsze otrzymuję Success, nawet jeśli aplikacja zgłasza wyjątek wewnętrzny.

Użyłem Application.Current.Shutdown(1) podczas próby powiadomienia o niepowodzeniu Harmonogramu zadań, ale nie udało mi się.

Jak można tego dokonać?

+0

Czy próbowałeś wyjść z kodem powrotu innym niż domyślny 0? Zobacz http://stackoverflow.com/questions/155610/how-do-i-specify-the-exit-code-of-a-onsole-application-in-net – hatchet

+1

Tak, próbowałem, ale zawsze dostaję sukces. –

+0

możliwy duplikat [W jaki sposób Windows Task Scheduler w Win7 rozpoznaje nieudane zadanie?] (Http://stackoverflow.com/questions/1335551/how-does-windows-task-scheduler-in-win7-recognize-a-failed -task) – Gabrielius

Odpowiedz

13

Należy podać kod wyjścia inny niż domyślna wartość 0 (co oznacza sukces). Można to zrobić za pomocą

Environment.Exit(someNumber) 

Environment.Exit

Trzeba by mieć globalną obsługi wyjątku, aby to zrobić inaczej Uncaught wyjątkami. Ten blogu daje więcej szczegółów: http://jrich523.wordpress.com/tag/task-scheduler/

EDIT

Zrobiłem założenie, że problem został w aplikacji. Wiesz, co mówią o założeniach. Problem, okazuje się, jest w projektowaniu Task Scheduler. Jak wskazano tutaj:

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

które zostały zweryfikowane w testowaniu

Harmonogramu zadań systemu Windows nie bada kod wyjścia lub jakiekolwiek inne wartości gdy ukończy zadanie. Musisz obsłużyć każdy błąd przetwarzania w swoim własnym skrypcie lub programie.

Jeśli zajrzysz do historii zaplanowanego zadania, powinieneś zobaczyć dwa zdarzenia, Akcja zakończona, a następnie Zadanie zakończone. Jeśli zbadać Działanie ukończone, powinno to wyglądać mniej więcej tak:

Task Scheduler zakończone powodzeniem zadania "\ Test4", przykład "{a41adae0-a378-45f6-AADC-648d27852042}", akcja „C : \ blah..blah \ Release \ WpfApplication1.exe”z kodem powrotu 55.

Jak widać, aplikacja wyszła z kodem powrotu, ale nadal mówi Task Scheduler sukces. Jedyne rozwiązanie, jakie widzę, to obsłużenie tego poprzez kliknięcie prawym przyciskiem myszy pozycji historii i wybranie "Załącz zadanie do tego zdarzenia ...".

Można również uruchomić aplikację z pliku wsadowego i sprawić, aby plik wsadowy sprawdził kod zakończenia i podjąć odpowiednie działania. Następnie można użyć Harmonogramu zadań, aby zaplanować plik wsadowy zamiast planowania bezpośrednio aplikacji WPF.

Jeśli chodzi o zwrot kodu wyjścia z aplikacji WPF, konieczne może być kliknięcie prawym przyciskiem myszy właściwości projektu w programie Visual Studio, a na karcie Aplikacje wybierz opcję Aplikacja konsoli dla typu danych wyjściowych. Ponadto należy użyć kompilacji wydania w Harmonogramie zadań, a nie w wersji debugowania, aby upewnić się, że używany jest kod wyjścia aplikacji, a nie coś wygenerowanego z dodanych elementów debugowania. Można sprawdzić, czy Twoja aplikacja jest prawidłowo generowania kodu wyjścia poprzez ten mały plik wsadowy w tym samym folderze co plik exe i uruchomienie go (zastępując exe nazwę pliku swojej aplikacji):

wpfapplication1.exe 
echo %errorlevel% 
pause 

oryginalnego kodu może pomyślnie ustawić kod wyjścia, ale zamknięcie systemu jest łagodniejszym wyjściem i może nie zakończyć się natychmiast (lub w ogóle), ponieważ będzie oczekiwać na wątki itp., aby zakończyć pomyślnie. Environment.Exit wyjdzie z większą siłą.

+0

Próbowałem, ale wciąż dostaję sukces. –

+0

@AlexandrePerez - przepraszam za moją początkową niekompletną odpowiedź. Zobacz moją ostatnią edycję. – hatchet

+10

Nie rozumiem, dlaczego program Windows Task Scheduler nie przestrzegałby zwracanej wartości uruchomionego programu! – kaptan

Powiązane problemy