C# 如何调查Process.Start()失败?
希望这是一个有效的问题。C# 如何调查Process.Start()失败?,c#,windows,service,process,process.start,C#,Windows,Service,Process,Process.start,希望这是一个有效的问题。 这是我维护的旧代码。 Windows服务(以系统或“专用服务用户”身份登录)将执行可移植的python exe,即python.exe运行代码(.pyc),并带有其他参数 问题: Process.Start()没有抛出异常,并且返回false,有没有办法调查原因?请不要粘贴MSDN文档,因为我已经阅读了足够多的时间。 我尝试使用UseShellExecute true/false执行python,这不重要,也不起作用 C#Windows服务代码: var process
这是我维护的旧代码。
Windows服务(以系统或“专用服务用户”身份登录)将执行可移植的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作为系统)执行python.exe时,它工作了
调用GetLastError()或封送。GetLastWin32Error()返回0。事件查看器中没有任何内容(应用程序、系统、安全性) 我用process monitor捕获了两个执行,一个有效,一个无效。两次执行都显示python.exe已启动,之后当然会有数千次调用。。我应该调查什么?如何查看安全策略是否阻止了我的exe
谢谢。检查文档中的返回值 如果流程资源已启动,则为true;如果未启动新流程资源(例如,如果重用现有流程),则为false 因此
false
不一定表示过程中发生错误;如果有错误,它应该抛出一个异常,它不会只是设置一个错误代码,然后静默地转到下一行
正如Harry在评论中所建议的,使用来监视python.exe
是一个好的开始 Process Monitor(可从Microsoft网站获得)可能会有所帮助。如果您只需要知道某些东西无法启动的原因,也许您可以在windows事件日志中找到一些线索事件查看器中没有任何内容。也没有防病毒。pyc的路径是相对的还是绝对的?@ilansch如果pyc在本地驱动器中会有区别吗?如果我的进程没有启动,或者没有立即启动和停止,我会在procmon上看到它吗?如果您的代码无法启动python.exe,应该会出现异常,如果未处理,将导致Windows服务崩溃。ProcMon只记录进程所做的一切,即使该进程只存在几毫秒。已获取进程监视器输出。进程已启动,映像已创建,进程为何启动。启动返回false?@ilansch false表示重用现有进程。Microsoft Word表现出相同的行为,当您打开第二个Word文档时,当已经打开一个文档时,相同的Word应用程序被激活,而不是启动新的Word应用程序。我知道,VM上没有现有的python.exe进程实例。此外,我在process monitor上看到了一个Create image命令,该命令在执行后带有python.exe。