Windows服务无法创建子进程?

时间:2017-11-10 18:27:36

标签: windows python-2.7 service popen

我正在编写一个Python脚本,必须在Windows系统上运行一些命令。我选择的方式是使用subprocess.Popen,因为我需要捕获并管道一些输出。我编译了它,当我手动运行.exe时,一切正常。

该脚本被认为在每个系统启动时运行,所以我创建了一个执行它的Windows服务,这就是问题出现的时候。基本上,它运行并可以执行其他一些操作,因此服务是成功创建的,但无法创建子进程并在其上执行命令。

因为它在我手动运行时工作正常,我认为代码中没有错误,并且问题与Windows服务有关。也许它不能创建子子进程?有人得到了吗?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题(在Windows Server 2012 R2上),并没有真正想进入Win32 API调用级别来获取我的(GUI应用程序在不关心GUI上的内容的情况下运行) exe在正确的会话桌面上。但是,我确实注意到我们有另一个正常运行的进程,作为MSBuild脚本的一部分。

我想到的解决方法是生成一个非常简单的msbuild文件来执行我想要启动并运行它的过程。似乎运行良好,但如果您需要系统管道进出您的.exe,可能会感到不快。

没有工作:

subprocess.call("MyExe.exe")

工作:

with open("temp.msbuild", "w") as mb:
    mb.write('<?xml version="1.0" encoding="utf-8" ?>\n')
    mb.write('<Project DefaultTargets="Run" xmlns="' 
             + 'http://schemas.microsoft.com/developer/msbuild/2003'
             + '">\n')
    mb.write('  <Target Name="Run">\n')
    mb.write('    <Exec Command="MyExe.exe"\>\n')
    mb.write('  </Target>\n')
    mb.write('</Project>\n')
subprocess.call("msbuild temp.msbuild")
os.remove("temp.msbuild")