繁体   English   中英

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

[英]how to investigate Process.Start() failure?

希望这是一个有效的问题。
这是我维护的遗留代码。
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?

谢谢。

检查文档以获取Process.Start的返回值

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

因此, false不一定表示Process.Start发生错误。 如果有错误,它应该引发异常,并且它不仅会设置错误代码,而且会静静地转到下一行。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM