我的 C# 应用程序在 Windows 任务计划程序中返回 0xE0434352,但并没有崩溃。

95

我写了一些C#应用程序,并通过Windows任务计划程序运行它们。它们正在成功运行(从它们编写的日志文件可以看到),但Windows任务计划程序显示它们返回了最后运行结果0xE0434352。我需要在我的C#应用程序中做些什么,以便它向Windows任务计划程序返回成功代码?


你的任务是做什么? - Ta01
1
https://dev59.com/x8S-zogBFxS5KdRjKKuU - Austin Salonen
该任务使用参数“-a”执行我的C#应用程序。应用程序正常运行,没有崩溃,所以我不确定为什么看起来像是Windows计划程序收到了错误代码。 - Kynrek
51
你的假设认为它没有崩溃是不正确的。0xe0434352 是一个低级别的CLR异常代码。通过编写 AppDomain.CurrentDomain.UnhandledException 的事件处理程序并记录 e.ExceptionObject.ToString() 的值来前进。 - Hans Passant
6
谢谢Hans,你是正确的。这篇文章帮助我按照你的建议设置了事件处理程序。 http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception(v=vs.71).aspx - Kynrek
12个回答

114
另一个选择是直接使用可通过Windows事件查看器访问的应用程序日志。 .Net错误将记录在应用程序日志中。
您可以在此处查看这些事件:
事件查看器(本地)> Windows日志> 应用程序

1
+1:检测错误变得更加容易了。在我的情况下,我的应用程序应该在异常时发送电子邮件,但配置文件中的 SMTP 没有正确配置。即使程序从未进入 catch 块,错误仍然会发生。修复配置文件解决了问题。 - Baz Guvenkaya
3
我的情况中,事件日志包含了堆栈跟踪,确实非常有用。 - was
4
请注意,这份事件日志中可能存在两个错误,要完全追求严谨精确。不要仅关注最新的一个错误,第一个错误可能包含更有趣的信息。 - RenniePet
1
在Win10中(可能也适用于其他版本),事件查看器中的路径为:事件查看器/Windows日志/应用程序。 - MikeH
1
.NET异常的堆栈跟踪被记录在源码 .NET Runtime 下。 - riQQ
1
@BazGuvenkaya 配置文件的重复键被指定了两次,只需删除其中一个实例即可解决问题。感谢您宝贵的建议!这让我朝着正确的方向前进。 - Leo Gurdian

50
在新窗口设置作业时,您有两个字段“程序/脚本”和“起始位置(可选)”。将程序名称放在第一个字段中,将程序位置放在第二个字段中。 如果不这样做,并且您的程序不是在exe目录中启动,它将无法找到位于其中的文件。

9
没问题。如果您的代码中使用了相对路径,那么需要指定程序位置。通常情况下,这就是exe文件所在的路径。 - Krisztián Balla
1
我只想指出这对于微软来说非常不直观。 - Carol
在提供“启动位置”之前,我的应用程序无法找到它从同一目录中使用的配置文件。 - Observer
在提供“启动位置”之前,我的应用程序无法找到它从同一目录中使用的配置文件。 - undefined

26

我按照描述添加了一个处理程序,异常消失了。我想我永远不会知道原因了... - Eric Nelson

12

我正在引用一个映射驱动器,发现映射的驱动器不一定对运行计划任务的用户账户可用,所以我使用了\\IP地址代替映射驱动器字母:,现在我的程序已经可以运行。


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

7
如果对其他人有帮助的话,我在任务运行的服务没有可写权限访问可执行文件位置时出现了这个错误。 它试图在那里写入日志文件。

这就是问题所在。我的应用程序正在向一个与其运行文件夹不同的文件夹写入数据。 - MartinH

2

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

在我的情况下,这个错误是由于文件路径错误造成的,因为任务管理器从"System32"作为初始路径启动程序,而不是我们想象中的那个文件夹。


2

我曾遇到这个问题,原因是由于.Net框架版本。我将构建升级到了4.0框架,但这似乎影响了应用程序使用的一些通信dll。我回滚到了3.5框架,然后它就正常工作了。


我需要降低我的版本,但是我遇到了重新安装许多DLL文件的错误,并且我的网站也无法运行。 - Amitya Narayan

1
我在使用MVC 5的dotNet Core 2.2时也遇到了相同的信息提示,但是Windows事件查看器中没有任何日志记录。
后来我发现我已经将项目sdk从Microsoft.NET.Sdk.Web更改为Microsoft.NET.Sdk.Razor(在projects.csproj文件中看到)。我将其改回去后问题就解决了 :)

0

还有PowerShell中的消息框。我将PowerShell脚本转换为exe文件。以管理员身份运行时可以正常工作,但在任务计划中也出现了错误。 PowerShell脚本中有一行带有write-output的代码。注释掉这行并编译新的exe文件后,任务计划成功完成。


0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接