我的 C# 应用程序将 0xE0434352 返回到 Windows 任务计划程序,但它没有崩溃

Posted

技术标签:

【中文标题】我的 C# 应用程序将 0xE0434352 返回到 Windows 任务计划程序,但它没有崩溃【英文标题】:My C# application is returning 0xE0434352 to Windows Task Scheduler but it is not crashing 【发布时间】:2013-01-20 14:55:36 【问题描述】:

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

【问题讨论】:

你的任务是做什么的? ***.com/questions/6244939/… 任务使用参数 -a 执行我的 C# 应用程序。应用程序正常执行并且没有崩溃,所以我不确定为什么它看起来像 windows 调度程序正在接收错误代码。 您认为它没有崩溃的假设是不正确的。 0xe0434352 是低级 CLR 异常代码。通过为 AppDomain.CurrentDomain.UnhandledException 编写事件处理程序并记录 e.ExceptionObject.ToString() 的值来取得进展 谢谢汉斯,你是对的。本文帮助我按照您的建议设置偶数处理程序 msdn.microsoft.com/en-us/library/… 【参考方案1】:

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

您可以在此处查看这些事件:

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

【讨论】:

+1:这样更容易检测到错误。就我而言,我的应用程序假设在异常期间发送电子邮件,并且配置文件中未正确配置 smtp。甚至程序也从未进入 catch 块,错误正在发生。修复配置解决了问题。 在我的案例中,事件日志包括堆栈跟踪,确实非常有用。 为了完全迂腐,请注意事件日志中可能有两个错误。不要只关注最新的;第一个可能包含更多有趣的信息。 在 Win10(可能还有其他)中,事件查看器中的路径是:EventViewer/Windows Logs/Application .NET异常的堆栈跟踪记录在源.NET Runtime【参考方案2】:

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

【讨论】:

没错。如果您在代码中使用相对路径,则需要指定程序位置。它通常是exe文件的路径。 我只想指出这与 MS 的直觉相悖。【参考方案3】:

Hans Passant 是正确的,我为 AppDomain.CurrentDomain.UnhandledException 添加了一个处理程序,如此处所述http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception(v=vs.71).aspx 我能够找到正在发生的异常并纠正它。

【讨论】:

我按照描述添加了一个处理程序,异常消失了。我想我永远不会知道...【参考方案4】:

我引用了一个映射驱动器,我发现运行计划任务的用户帐户并不总是可以使用映射驱动器,所以我使用\\IPADDRESS 而不是MAPDRIVELETTER:正在运行。

【讨论】:

我遇到了类似的问题,无法访问UNC网络路径(不同的用户),我尝试使用凭据管理器添加所需的帐户信息。【参考方案5】:

如果它可以帮助其他人,当运行任务的服务没有对​​可执行位置的写入权限时,我会收到此错误。它试图在那里写一个日志文件。

【讨论】:

就是这个。我的应用程序正在写入一个文件夹,而不是它正在运行的文件夹。【参考方案6】:

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

【讨论】:

我需要降级我的版本,但我收到重新安装许多 DLL 的错误,而且我的网站也无法运行。【参考方案7】:

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

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

【讨论】:

【参考方案8】:

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

我发现我已将 Project sdk 从 Microsoft.NET.Sdk.Web 更改为 Microsoft.NET.Sdk.Razor(在 projects.csproj 文件中看到)。我把它改回来了,效果很好:)

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

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

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

【讨论】:

【参考方案11】:

还有 PowerShell 中的消息框。我将 PowerShell 脚本转换为 exe。以管理员身份运行时它可以工作,但在任务计划中我也收到此错误。 PowerShell 脚本中有一行带有写输出。注释完这一行并编译新的exe任务计划成功完成。

【讨论】:

【参考方案12】:

在我的情况下,这是权限问题,任务计划程序的用户对数据库所在的服务器没有权限。

【讨论】:

以上是关于我的 C# 应用程序将 0xE0434352 返回到 Windows 任务计划程序,但它没有崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Windows 应用程序启动错误异常代码:0xe0434352

如何修复 .NET Windows 应用程序在启动时崩溃并出现异常代码:0xE0434352?

Exception code: 0xE0434352

CLR Exception 0xE0434F4D和0xE0434352的区别

应用程序发生异常 未知的软件异常(0x0eedfade),位置为0x7c812afb 怎么解决

错误:从 XCODE 4.2 同步 .ipa 文件临时分发时出现 0xe8003ffe