我有一个用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配置它也会将其设置为执行。
我将Action设置为调用'C:\ myApp.exe',类似于我在Windows Server 2003中设置它的方式
当计划任务执行并且我已登录时,'bob.exe'应用程序将从'myApp.exe'执行。但是,当我没有登录并且计划任务执行时,'myApp.exe'被执行但是'bob.exe'永远不会被执行(我可以通过看到'bob.exe'没有输出文件来验证这一点)。计划任务报告没有错误,上次运行结果显示“操作成功完成。(0x0)”。
我发现了类似的帖子here,但我无法解决我的情况。我错过了什么?
答案 0 :(得分:1)
我的应用程序调用7za.exe来存档数据库备份时遇到了类似的问题。当我手动运行我的应用程序时它工作正常,但是当我通过任务计划程序安排我的应用程序时,7z例程不会启动并且没有给我的应用程序一个详细的错误。我发现将我运行我的应用程序的目录添加到任务计划程序的“开始于(可选):”框中更正了我的问题。
程序/脚本:" C:\ Program Files(x86)\ CustApp \ CustApp.exe"
开始(可选) C:\ Program Files(x86)\ CustApp \
请注意,不要在"开始使用双引号(可选)"为目录设置,我做错了。
答案 1 :(得分:0)
我遇到了运行批处理文件(在WS2008上)的类似问题,问题是由于用户在执行批处理文件和可执行文件设置的文件夹上执行计划任务的权限。 我不确定WS 2012的安全性是否不同,但如果我是你,我会尝试调试应用程序(如果你有代码)检查权限。 HTH