我编写了一些通过 Windows 任务调度程序运行的 C# 应用程序。它们运行成功(正如我从它们正在编写的日志文件中看到的那样),但 Windows 任务调度程序显示它们返回的最后运行结果为0xE0434352
. 我需要在我的 C# 应用程序中做些什么,以便它向 Windows 任务调度程序返回成功代码吗?
12 回答
另一种选择是简单地使用可通过 Windows 事件查看器访问的应用程序日志。.Net 错误将记录到应用程序日志中。
您可以在此处查看这些事件:
事件查看器(本地)> Windows 日志 > 应用程序
在新窗口中设置作业时,您有两个字段“程序/脚本”和“开始(可选) ”。将程序名称放在第一位,程序位置放在第二位。如果您不这样做并且您的程序不在 exe 目录中启动,它将找不到位于其中的文件。
Hans Passant 是正确的,我为 AppDomain.CurrentDomain.UnhandledException 添加了一个处理程序,如此处所述http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception(v=vs.71).aspx我是能够找到正在发生的异常并纠正它。
我正在引用一个映射驱动器,我发现映射驱动器并不总是可用于运行计划任务的用户帐户,因此我使用\\IPADDRESS
而不是MAPDRIVELETTER:
并且我已经启动并运行。
如果它对其他人有帮助,当运行任务的服务没有对可执行位置的写入权限时,我会收到此错误。它试图在那里写一个日志文件。
我遇到了这个问题,这是由于 .Net 框架版本造成的。我已将构建升级到框架 4.0,但这似乎影响了应用程序正在使用的一些 comms dll。我回滚到框架 3.5,它运行良好。
我遇到了同样的错误,但我通过将文件读取路径从“ConfigFile.xml”更改为 AppDomain.CurrentDomain.BaseDirectory.ToString() +“ConfigFile.xml ”来修复它
在我的情况下,由于文件路径错误导致此错误,因为任务管理器从“System32”作为初始路径启动程序,但我们认为的文件夹。
我使用 MVC 5 在 dotNet Core 2.2 中收到了相同的消息消息,但是没有任何内容被记录到 Windows 事件查看器中。
我发现我已将 Project sdk 从更改Microsoft.NET.Sdk.Web
为Microsoft.NET.Sdk.Razor
(在projects.csproj
文件中看到)。我把它改回来了,效果很好:)
还有 PowerShell 中的消息框。我将 PowerShell 脚本转换为 exe。当以管理员身份运行时,它可以工作,但在任务计划中我也收到了这个错误。PowerShell 脚本中有一行带有写输出。注释此行并编译新的 exe 任务计划后成功完成。
我在处理 COM 对象时遇到了这个问题。在某些情况下(我的错),我破坏了一个外部 .EXE 进程,在一个并行线程中,一个变量试图访问 com 接口 app.method 并且发生了 COM 级崩溃。任务计划程序注意到这一点并关闭了应用程序。但是如果您在控制台中运行应用程序并且不处理异常,应用程序将继续工作......
请注意,如果您使用非托管代码或外部对象(AD、Socket、COM ...),您需要对其进行监控!
就我而言,这是因为我有消息框。一旦我注释掉该代码,它就开始工作了。我记得当我按照此线程中的建议查看事件日志时,这可能是个问题。谢谢大家!
在我的情况下,这是权限问题,任务计划程序的用户对存在数据库的服务器没有权限。