16

我在任务计划程序中安排了一个 WPF 应用程序。

我想在应用程序失败时通知任务计划程序。

在任务计划程序窗口Task Status的列部分中Run Result,我总是得到Success,即使应用程序引发内部异常也是如此。

我曾Application.Current.Shutdown(1)尝试向任务计划程序通知失败,但没有成功。

如何才能做到这一点?

4

2 回答 2

19

问题在于任务计划程序的设计。正如这里指出的:

Win7中的Windows任务计划程序如何识别失败的任务?

我已经在测试中验证了

当您的任务完成时,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/

于 2013-06-06T18:40:32.900 回答
0

适用于:

抛出新异常

而不是操作成功完成。(0x0),它将显示类似(0xE0434362)

于 2021-03-05T12:10:50.310 回答