我遇到了一个关于 Inno Setup 的奇怪错误。我有一个与 PyInstaller 一起打包的 Python 程序,它可以检测并下载自身的更新(这也是 Inno 安装程序)。
当用户自己运行安装文件时,运行安装后的程序就可以了。但是,当我从程序中运行安装程序 EXE 时,整个安装程序仍然运行,但安装后不起作用。
我确保我的过程与以下代码完全分开且不相交:
CREATE_NEW_PROCESS_GROUP = 0x00000200
DETACHED_PROCESS = 0x00000008
kwargs = {}
kwargs.update(creationflags=DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP)
kwargs.update(close_fds=True)
p = subprocess.Popen('"' + exePath + '"', **kwargs)
真正令人沮丧的是,从原始 Python 程序运行它是可行的!只有当它与 PyInstaller 一起打包时,post install 才不起作用。
我不知道去哪里找出这个问题,也不知道如何调试它。非常感谢您的想法和理论!
编辑:
这是一个演示我的问题的小型测试程序(名为 test_runner.py 的文件):
import subprocess
def run_exe(exePath):
'''
Runs a .exe on Windows in a 100% separate environment.
'''
CREATE_NEW_PROCESS_GROUP = 0x00000200
DETACHED_PROCESS = 0x00000008
kwargs = {}
kwargs.update(creationflags=DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP)
kwargs.update(close_fds=True)
p = subprocess.Popen('"' + exePath + '"', **kwargs)
path = r'<some absolute path>\setup.exe'
run_exe(path)
然后我编译它:
pyinstaller.py test_runner.py