我在任务计划程序中安排了一个 WPF 应用程序。
我想在应用程序失败时通知任务计划程序。
在任务计划程序窗口Task Status
的列部分中Run Result
,我总是得到Success
,即使应用程序引发内部异常也是如此。
我曾Application.Current.Shutdown(1)
尝试向任务计划程序通知失败,但没有成功。
如何才能做到这一点?
我在任务计划程序中安排了一个 WPF 应用程序。
我想在应用程序失败时通知任务计划程序。
在任务计划程序窗口Task Status
的列部分中Run Result
,我总是得到Success
,即使应用程序引发内部异常也是如此。
我曾Application.Current.Shutdown(1)
尝试向任务计划程序通知失败,但没有成功。
如何才能做到这一点?
问题在于任务计划程序的设计。正如这里指出的:
我已经在测试中验证了
当您的任务完成时,Windows 任务计划程序不会检查退出代码或任何其他值。您必须在自己的脚本或程序中处理任何错误处理。
如果您查看计划任务的历史记录,您应该会看到两个事件,以及已完成的操作,然后是已完成的任务。如果您检查 Action Completed,它应该看起来像这样:
任务计划程序成功完成任务“\test4”,实例“{a41adae0-a378-45f6-aadc-648d27852042}”,操作“C:\blah..blah\Release\WpfApplication1.exe”,返回码为 55。
如您所见,应用程序以返回码退出,但任务计划程序仍然显示成功。我看到的唯一解决方案是通过右键单击历史条目并选择“将任务附加到此事件...”来自己处理这个问题。
或者,您可以从批处理文件运行您的应用程序,并让批处理文件检查退出代码,并采取相应措施。然后,您将使用任务计划程序来计划批处理文件,而不是直接计划您的 WPF 应用程序。
关于从 WPF 应用程序返回退出代码,您可能需要在 Visual Studio 中右键单击项目属性,然后在“应用程序”选项卡中,选择“控制台应用程序”作为“输出类型”。此外,在任务计划程序中使用发布版本而不是调试版本,以确保使用您的应用程序的退出代码,而不是由添加的调试内容生成的东西。您可以通过将这个小批处理文件与您的 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)