猿问

从python运行外部EXE

我正在从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)如果我更改PORTABLE_APP_LOCATION为CDBurnerXP便携式版本的路径,并使用ShellExecuteEx选项而不是CreateProcess,则可以看到该进程已在Windows Task Manager上启动,但该应用程序的实际窗口不可见。对于其他EXE(例如GIMP的便携式版本),在运行后确实会出现这种情况。我认为这种差异来自可执行文件的属性。有人知道是什么原因造成的吗?


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


慕的地8271018
浏览 329回答 2
2回答

慕斯王

关于第一个问题,您应该注意,使用pythonw.exe运行时执行python代码时,您的sys.stdout缓冲区限制为4096字节,并且在溢出时将抛出IOError,因为代码正在无窗口运行,因此您将看不到IOError。
随时随地看视频慕课网APP

相关分类

Python
我要回答