如何调查Process.Start()失败?

时间:2019-02-02 02:44:38

标签: c# windows service process process.start

希望这是一个有效的问题。
这是我维护的旧代码。
Windows服务(以SYSTEM身份或“专用服务用户”身份登录)将执行可移植的python exe,即带有附加参数的python.exe运行代码(.pyc)。

问题:
从Process.Start()没有引发任何异常,并且它返回false,有没有办法调查为什么?请不要粘贴已阅读足够多次的MSDN文档。
我尝试用UseShellExecute true / false执行python,没关系,不起作用。

C#Windows服务代码:

var processInfo = new ProcessStartInfo(_pythonExePath/*path to python.exe*/, exeParams/*path to pyc, and additionl params*/)
{
    WorkingDirectory = workingDirectory
};
var process = new Process
{
    StartInfo = processStartInfo,
    EnableRaisingEvents = true
};
process.Start();

当我使用命令行中的参数(作为“专用服务用户”以及psexec作为SYSTEM)执行python.exe时,它起作用了。

调用GetLastError()或Marshal.GetLastWin32Error()返回0。
事件查看器中没有任何内容(应用程序,系统,安全性)

我用流程监视器捕获了2个执行,一个有效,一个无效。两次执行都显示python.exe已启动,并且此后当然有成千上万次调用..我应该调查什么?我如何查看安全策略是否阻止了我的exe?

谢谢。

1 个答案:

答案 0 :(得分:2)

检查文档中Process.Start的返回值

  

如果启动了流程资源,则为true;否则为false。如果没有启动新的流程资源(例如,如果现有流程被重用),则为false。

因此false不一定表示Process.Start中发生了错误;如果发生错误,则应该抛出异常,而不仅仅是设置错误代码并静默转到下一行。

正如哈里在评论中建议的那样,使用Process Monitor监视python.exe是一个好的开始。