我的C#应用​​程序将0xE0434352返回到Windows Task Scheduler,但没有崩溃


76

我已经编写了一些通过Windows Task Scheduler运行的C#应用​​程序。它们正在成功运行(如我从日志文件中看到的那样),但是Windows Task Scheduler显示它们返回的最后运行结果0xE0434352。我需要在C#应用程序中做一些事情,以便它向Windows任务计划程序返回成功代码吗?


您的任务是做什么的?
Ta01 2013年


该任务使用参数-a执行我的C#应用​​程序。该应用程序正常运行,并且没有崩溃,因此我不确定为什么它看起来像Windows Scheduler收到错误代码。
Kynrek

48
您没有崩溃的假设是不正确的。0xe0434352是低级CLR异常代码。通过为AppDomain.CurrentDomain.UnhandledException编写事件处理程序来取得成功,并记录e.ExceptionObject.ToString()的值
Hans Passant

5
谢谢汉斯,你是正确的。本文帮助我按照您的建议msdn.microsoft.com/en-us/library/…
Kynrek

Answers:


88

另一个选择是仅使用可通过Windows事件查看器访问的应用程序日志。.Net错误将记录到应用程序日志中。

您可以在这里看到这些事件:

事件查看器(本地)> Windows日志>应用程序


+1:这是更容易检测到错误的方式。在我的情况下,我的应用程序假设在异常期间发送了电子邮件,并且在配置文件中未正确配置smtp。即使程序从未执行过catch语句,也发生了错误。修复配置可以解决此问题。
巴兹(Baz Guvenkaya)'16

3
就我而言,事件日志包括堆栈跟踪,确实非常有用。

3
只是要完全学究,请注意事件日志中可能存在两个错误。不要只关注最新的内容;第一个可能包含更多有趣的信息。
RenniePet

1
在Win10中(可能还有其他),事件查看器中的路径为:EventViewer / Windows Logs / Application
MikeH

.NET异常的.NET Runtime
堆栈跟踪

40

在新窗口中设置作业时,您有两个字段“ program / script ”和“ Start in(可选) ”。将程序名称放在第一位,然后将程序位置放在第二位。如果您不这样做,并且程序不在exe目录下启动,它将不会找到其中的文件。


7
究竟。如果在代码中使用相对路径,则需要指定程序位置。它通常是exe文件的路径。
珍妮·奥雷利

我只想指出,与MS相比,这非常不直观。
卡罗尔


12

我正在引用映射的驱动器,但发现运行计划任务的用户帐户并不总是可以使用映射的驱动器,因此我使用\\IPADDRESS而不是MAPDRIVELETTER:并启动并运行它。


我遇到了类似的问题,其中无法访问UNC网络路径(不同的用户),我尝试使用凭据管理器添加所需的帐户信息。
dakab

7

万一它对其他人有帮助,当任务运行所在的服务对可执行位置没有写权限时,我会收到此错误消息。它试图在其中写入日志文件。


这就是那个。我的应用程序将写入正在运行的文件夹以外的文件夹。
MartinH

2

我遇到了这个问题,这是由于.Net框架版本。我已将构建升级到框架4.0,但这似乎会影响应用程序正在使用的一些comms dll。我回滚到框架3.5,它工作正常。


我需要降低我的版本的等级,但是然后出现重新安装许多DLL的错误,而且我的网站无法运行。
baymax

2

我遇到了同样的错误,但已通过将文件读取路径从“ ConfigFile.xml”更改为 AppDomain.CurrentDomain.BaseDirectory.ToString()+“ ConfigFile.xml”来解决。

在我的情况下,由于文件路径错误而导致此错误,因为任务管理器从“ System32”启动程序作为初始路径,但启动了我们认为的文件夹。


1

我在使用MVC 5的dotNet Core 2.2中得到了相同的消息,但是没有任何事件记录到Windows事件查看器中。

我发现我已经将Project sdk从更改Microsoft.NET.Sdk.WebMicrosoft.NET.Sdk.Razor(在projects.csproj文件中看到)。我改回来了,它工作正常:)


0

就我而言,这是因为我有消息框。一旦我注释掉该代码,它便开始工作。我记得当我按照该线程的建议查看事件日志时,这可能是个问题。谢谢大家!


0

使用COM对象时遇到了此问题。在某些情况下(我的错),我在并行线程中破坏了一个外部.EXE进程,一个变量试图访问com接口app.method并发生了COM级崩溃。Task Scheduler注意到了这一点,并关闭了该应用程序。但是,如果您在控制台中运行该应用程序并且不处理异常,则该应用程序将继续运行...

请注意,如果您使用非托管代码或外部对象(AD,Socket,COM ...),则需要对其进行监视!


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.