0

我遇到了一个关于 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
4

1 回答 1

0

弄清楚了。事实证明,我必须清除环境变量PYTHONHOMEPYTHONPATH以便 PyInstaller 打包程序可以为这些变量生成正确的路径(它们是由产生设置的先前 PyInstaller 打包程序设置的)。

我最终让 Inno Setup 运行一个批处理文件,在运行可执行文件之前清除它们。我希望这可以帮助那里的人。

于 2013-07-26T23:20:24.013 回答