Windows Services 无法创建子进程?



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

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

由于手动运行它时它工作正常,因此我假设代码中没有错误,并且该问题与Windows服务有关。也许它不能创建子流程?有人明白了吗?

我遇到了同样的问题(在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")

最新更新