0

我正在从我的 python 应用程序运行几个便携式应用程序。

考虑以下代码:

import win32com.shell.shell as w32shell
import os
import sys
import win32process as process

PORTABLE_APP_LOCATION = "C:\\Windows\\System32\\calc.exe"

#This function runs a portable application:
def runPortable():
    try:
        startObj = process.STARTUPINFO()
        process.CreateProcess(PORTABLE_APP_LOCATION,None,None,None,8,8,None,None,startObj)
        # OR
        #w32shell.ShellExecuteEx(lpFile=PORTABLE_APP_LOCATION)
    except:
        print(sys.exc_info()[0])
runPortable()

1)我应该期望从 pythonw 或 python 执行此代码有什么不同吗?

2) 如果我更改为CDBurnerXP 便携式版本PORTABLE_APP_LOCATION的路径并使用 ShellExecuteEx 选项而不是 CreateProcess,我会看到该进程在 Windows 任务管理器上启动,但应用程序的实际窗口不可见。其他 EXE 不会发生这种情况,例如在运行后出现的便携式GIMP版本。我认为这种差异来自可执行文件的属性。有谁知道这是什么原因造成的?

3) Windows 在什么条件下提示“您确定要运行此 EXE”?我相信 CDBurnerXP 是用证书签名的,但有时 Windows 在尝试从 python 中运行这个 EXE 时仍然会弹出这个问题。

非常感谢。

4

2 回答 2

1

关于您的第一个问题,您应该注意,当使用pythonw.exe运行时执行 python 代码时,您的sys.stdout缓冲区被限制为4096字节,并且当溢出时会抛出一个 IOError ,因为代码运行时没有窗口。

于 2013-06-20T07:56:54.967 回答
0

我是这个领域的新手。也许这可以帮助你

使用subprocess.call,更多信息在这里

import subprocess
subprocess.call(["C:\\temp\\calc.exe"])

或者

import os
os.system('"C:/Windows/System32/notepad.exe"')

我希望它可以帮助你...

于 2013-06-17T12:04:21.903 回答