![](/img/trans.png)
[英]How to get application folder when program is started by Windows Task Scheduler
[英]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.