繁体   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