Inno Setup不会运行安装后的程序

时间:2013-07-26 16:19:50

标签: python inno-setup pyinstaller

我遇到了一个关于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一起打包时,安装后才会起作用。

我不知道在哪里找出这个问题,也不知道如何调试它。非常感谢您的想法和理论!

编辑:

这是一个小型测试程序,用于演示我的问题(名为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

1 个答案:

答案 0 :(得分:0)

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

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