Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当应用程序失败时,如何通知Windows任务计划程序?_C#_Wpf_Scheduled Tasks - Fatal编程技术网

C# 当应用程序失败时,如何通知Windows任务计划程序?

C# 当应用程序失败时,如何通知Windows任务计划程序?,c#,wpf,scheduled-tasks,C#,Wpf,Scheduled Tasks,我在任务计划程序中计划了一个WPF应用程序 我想在应用程序失败时通知任务调度器 在任务计划程序窗口的任务状态部分的运行结果列中,即使应用程序引发内部异常,我也总能获得成功 我使用了Application.Current.Shutdown(1)试图通知任务调度程序失败,但我没有成功 如何做到这一点?问题在于任务调度器的设计。正如这里指出的: 我已经在测试中验证过了 Windows任务计划程序不检查退出代码或任何其他代码 任务完成时的值。您必须处理任何错误处理 在您自己的脚本或程序中 如果查看计划

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

我想在应用程序失败时通知任务调度器

在任务计划程序窗口的
任务状态
部分的
运行结果
列中,即使应用程序引发内部异常,我也总能获得
成功

我使用了
Application.Current.Shutdown(1)
试图通知任务调度程序失败,但我没有成功


如何做到这一点?

问题在于任务调度器的设计。正如这里指出的:

我已经在测试中验证过了

Windows任务计划程序不检查退出代码或任何其他代码 任务完成时的值。您必须处理任何错误处理 在您自己的脚本或程序中

如果查看计划任务的历史记录,应该会看到两个事件,操作完成,然后是任务完成。如果检查已完成的操作,它应该如下所示:

任务计划程序已成功完成任务“\test4”,实例 “{a41adae0-a378-45f6-aadc-648d27852042}”,行动 返回代码为55的“C:\blah..blah\Release\WpfApplication1.exe”

如您所见,应用程序退出时返回一个代码,但任务调度器仍然表示成功。我看到的唯一解决方案是通过右键单击历史记录条目并选择“将任务附加到此事件…”自行处理此问题

或者,您可以从批处理文件运行应用程序,让批处理文件检查退出代码,并相应地执行操作。然后,您将使用任务调度器来调度批处理文件,而不是直接调度WPF应用程序

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

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

要使用Environment.Exit,您应该指定一个退出代码,而不是默认值0(表示成功)。您可以使用

Environment.Exit(someNumber)

您需要有一个全局异常处理程序来为其他未捕获的异常执行此操作。此博客文章提供了更多详细信息:

适用于:

抛出新异常


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

您是否尝试使用默认0以外的返回代码退出?看,是的,我试过了,但总是成功。我已经向MS反馈中心提交了建议,可能重复。你可以投票支持它(链接仅在Win10上有效)@AlexandrePerez-很抱歉我最初的回答不完整。查看我最近的编辑。我不明白为什么Windows任务计划程序不尊重正在运行的程序的返回值!这个答案还不清楚——解决方案已经完成了一半。谢谢你的努力;多么令人沮丧的问题!
Environment.Exit(someNumber)