【发布时间】:2015-07-30 09:24:49
【问题描述】:
我有一个用 C# (myApp.exe) 编写的 .NET 控制台应用程序,它运行一个外部应用程序 ('bob.exe')。当我手动运行 myApp.exe 时,控制台应用程序运行良好。调用应用程序的 C# 代码是:
System.Diagnostics.ProcessStartInfo procStartInfo =
new System.Diagnostics.ProcessStartInfo("C:\\bob.exe");
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
// Do not create the black window.
procStartInfo.CreateNoWindow = true;
// Create the process and assign its ProcessStartInfo and start it
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();
在 Windows Server 2003 中,我创建了一个定期执行“myApp.exe”的计划任务。即使用户没有登录,它也被设置为执行。计划任务工作并调用“bob.exe”(我能够通过查看“bob.exe”的输出文件来验证这一点)
然后我们升级到 Windows Server 2012。我在 Windows Server 2012 中创建了一个计划任务,将其设置为即使用户未登录也可以执行,并为 Windows Server 2003 配置它。
我将操作设置为调用“C:\myApp.exe”,类似于我在 Windows Server 2003 中的设置方式
当计划任务执行并且我登录时,“bob.exe”应用程序将从“myApp.exe”执行。但是,当我没有登录并且计划任务执行时,“myApp.exe”被执行但“bob.exe”从未被执行(我可以通过查看“bob.exe”没有输出文件来验证这一点)。计划任务没有报告错误,并且上次运行结果显示“操作成功完成。(0x0)”。
我发现了一个类似的帖子here,但我无法解决我的问题。我错过了什么?
【问题讨论】:
-
错误信息呢?
-
计划任务没有返回/报告错误消息。上次运行结果显示“操作成功完成”。
-
添加错误日志。无论如何,您都需要这样做。给我们异常 ToString 输出。也可能是 bob.exe 成功启动并很快崩溃的情况。
-
@usr 从 proc.Start() 启动的应用程序“bob.exe”是外部第三方应用程序。由于我将“bob.exe”作为单独的进程启动,因此原始应用程序(“myApp.exe”)无法访问任何引发的异常。注意 - 我运行外部应用程序的整个函数都包含在 try/catch 中。没有抛出/捕获异常。这个问题的标题有点误导。 Process.Start() 中没有失败。当应用程序作为计划任务运行并且用户未登录时,它似乎只是不执行。
-
那么您最好的调试方法是捕获 bob 的控制台输出并附加进程监视器跟踪。会出现一些访问冲突或访问意外路径。
标签: c# .net windows server scheduled-tasks