簡體   English   中英

當我的應用程序失敗時如何通知 Windows 任務計划程序?

[英]How do I notify Windows Task Scheduler when my application fails?

我在任務計划程序中安排了一個 WPF 應用程序。

我想在應用程序失敗時通知任務計划程序。

在 Task Scheduler 窗口中,在Run Result列的Task Status部分中,即使應用程序引發內部異常,我也總是得到Success

我使用Application.Current.Shutdown(1)試圖通知任務計划程序失敗,但我沒有成功。

如何才能做到這一點?

問題在於任務計划程序的設計。 正如這里所指出的:

Win7 中的 Windows 任務計划程序如何識別失敗的任務?

我已經在測試中驗證過

當您的任務完成時,Windows 任務計划程序不會檢查退出代碼或任何其他值。 您必須在自己的腳本或程序中處理任何錯誤處理。

如果您查看計划任務的歷史記錄,您應該看到兩個事件,一個是 Action Completed,一個是 Task Completed。 如果您檢查 Action Completed,它應該如下所示:

任務計划程序成功完成任務 "\\test4" ,實例 "{a41adae0-a378-45f6-aadc-648d27852042}" ,操作 "C:\\blah..blah\\Release\\WpfApplication1.exe" 返回代碼 55。

如您所見,應用程序以返回碼退出,但任務計划程序仍顯示成功。 我看到的唯一解決方案是通過右鍵單擊歷史條目並選擇“將任務附加到此事件...”來自己處理。

或者,您可以從批處理文件運行您的應用程序,並讓批處理文件檢查退出代碼,並采取相應的行動。 然后,您將使用任務計划程序來安排批處理文件,而不是直接安排您的 WPF 應用程序。

關於從 WPF 應用程序返回退出代碼,您可能需要右鍵單擊 Visual Studio 中的項目屬性,然后在“應用程序”選項卡中,為“輸出類型”選擇“控制台應用程序”。 此外,在 Task Scheduler 中使用發布版本而不是調試版本來確保使用應用程序的退出代碼,而不是從添加的調試內容中生成的內容。 您可以通過將這個小批處理文件與您的 exe 文件放在同一文件夾中並運行它(替換您的應用程序的 exe 文件名)來測試您的應用程序是否正確生成退出代碼:

wpfapplication1.exe
echo %errorlevel%
pause

您的原始代碼可能會成功設置退出代碼,但 Shutdown 是一種更溫和的退出,並且可能不會立即(或根本不會)退出,因為它會等待線程等正常退出。 Environment.Exit 會更強力退出。

要使用 Environment.Exit,您應該指定除默認值 0(表示成功)以外的退出代碼。 您可以使用

Environment.Exit(someNumber)

環境.退出

您需要有一個全局異常處理程序來為其他未捕獲的異常執行此操作。 這篇博文提供了更多詳細信息: http : //jrich523.wordpress.com/tag/task-scheduler/

適用於:

拋出新異常

而不是操作成功完成。 (0x0) ,它會顯示類似(0xE0434362)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM