gpt4 book ai didi

c# - 当我的应用程序失败时如何通知 Windows 任务计划程序?

转载 作者:可可西里 更新时间:2023-11-01 07:45:56 26 4
gpt4 key购买 nike

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

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

在 Task Scheduler 窗口中,在 Run Result 列的 Task Status 部分,即使应用程序抛出内部异常。

我使用 Application.Current.Shutdown(1) 尝试向 Task Scheduler 通知失败,但没有成功。

如何做到这一点?

最佳答案

问题出在Task Scheduler的设计上。正如此处指出的:

How does Windows Task Scheduler in Win7 recognize a failed task?

我已经在测试中验证过

The Windows Task Scheduler does not examine the exit code or any other values when your task completes. You must handle any error processing within your own script or program.

如果查看计划任务的历史记录,您应该会看到两个事件,Action Completed,然后是 Task Completed。如果您检查 Action Completed,它应该看起来像这样:

Task Scheduler successfully completed task "\test4" , instance "{a41adae0-a378-45f6-aadc-648d27852042}" , action "C:\blah..blah\Release\WpfApplication1.exe" with return code 55.

如您所见,应用程序退出并返回代码,但任务计划程序仍显示成功。我看到的唯一解决方案是通过右键单击历史条目并选择“将任务附加到此事件...”来自行处理。

或者,您可以从一个批处理文件运行您的应用程序,并让该批处理文件检查退出代码,并采取相应的行动。然后,您将使用任务计划程序来计划批处理文件,而不是直接计划您的 WPF 应用程序。

关于从 WPF 应用程序返回退出代码,您可能需要右键单击 Visual Studio 中的项目属性,然后在应用程序选项卡中,为输出类型选择控制台应用程序。此外,在 Task Scheduler 中使用发布版本而不是调试版本,以确保使用应用程序的退出代码,而不是从添加的调试内容中生成的代码。您可以通过将这个小批处理文件与您的 exe 文件放在同一文件夹中并运行它(替换您的应用程序的 exe 文件名)来测试您的应用程序是否正确生成退出代码:

wpfapplication1.exe
echo %errorlevel%
pause

您的原始代码可能会成功设置退出代码,但 Shutdown 是一种更温和的退出方式,可能不会立即(或根本不会)退出,因为它将等待线程等正常退出。 Environment.Exit 将更有力地退出。

要使用 Environment.Exit,您应该指定默认值 0(表示成功)以外的退出代码。你可以使用

Environment.Exit(someNumber)

Environment.Exit

您需要有一个全局异常处理程序来为其他未捕获的异常执行此操作。这篇博文提供了更多详细信息:http://jrich523.wordpress.com/tag/task-scheduler/

关于c# - 当我的应用程序失败时如何通知 Windows 任务计划程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16969500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com