【问题标题】:Process.Start() fails to execute when run as Scheduled TaskProcess.Start() 作为计划任务运行时无法执行
【发布时间】: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


【解决方案1】:

我在运行批处理文件(在 WS2008 上)时遇到了类似的问题,问题是由于授予用户在设置批处理文件和可执行文件的文件夹上执行计划任务的权限。 我不确定 WS 2012 的安全性是否不同,但如果我是你,我会尝试调试应用程序(如果你有代码)检查权限。 高温

【讨论】:

  • 计划任务设置为在它工作时(即当我登录并且计划任务自动运行时)和当它不工作时(即当我未登录,计划任务自动运行)。权限会是这个设置的问题吗?
  • 我认为有更多系统管理员经验的人能够更好地回答你,我可以说的是,在我们系统中工作多年的计划任务在几周前停止工作,我们没有更改运行它的用户对可执行文件和批处理文件以及用户有权访问的文件夹的权限。即使在我们的情况下,作业也没有给出任何错误消息,但任务没有执行,我认为您需要检查用户的安全策略,并查看在作为“服务”帐户工作时它的权限是否以某种方式改变了。
【解决方案2】:

我的应用程序调用 7za.exe 来存档数据库备份时遇到了类似的问题。当我手动运行我的应用程序时,它运行良好,但是当我通过任务计划程序安排我的应用程序时,7z 例程不会启动并且不会给我的应用程序一个详细错误。我发现将运行我的应用程序的目录添加到任务计划程序的 Start in (optional): 框中更正了我的问题。

程序/脚本: "C:\Program Files (x86)\CustApp\CustApp.exe"

从(可选)开始 C:\Program Files (x86)\CustApp\

注意不要在目录的“开始(可选)”设置中使用双引号,我这样做时会出错。

【讨论】:

  • 我在 Win Server 2016 上试过这个,它工作。用户已经被定义,它必须使用它来执行任务。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-10
  • 2014-05-05
  • 2013-12-13
  • 2014-01-27
  • 1970-01-01
  • 2020-06-01
  • 2015-09-20
相关资源
最近更新 更多