Python Inno设置没有';t在安装后运行程序

Python Inno设置没有';t在安装后运行程序,python,inno-setup,pyinstaller,Python,Inno Setup,Pyinstaller,我遇到了一个关于Inno设置的奇怪错误。我有一个PyInstaller打包的Python程序,它可以检测并下载自身的更新(也是Inno安装程序) 当用户自己运行安装文件时,在安装后运行程序是有效的。但是,当我从程序中运行setup EXE时,整个安装程序仍然运行,但安装后不起作用 我确保我的流程与以下代码完全分离: CREATE_NEW_PROCESS_GROUP = 0x00000200 DETACHED_PROCESS = 0x00000008 kwargs = {} kwargs.upd

我遇到了一个关于Inno设置的奇怪错误。我有一个PyInstaller打包的Python程序,它可以检测并下载自身的更新(也是Inno安装程序)

当用户自己运行安装文件时,在安装后运行程序是有效的。但是,当我从程序中运行setup 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的文件):


我明白了。事实证明,我必须清除环境变量
PYTHONHOME
PYTHONPATH
,以便PyInstaller打包的程序可以为这些变量生成正确的路径(它们是由生成安装程序的前一个PyInstaller打包程序设置的)


我最终让Inno安装程序运行一个批处理文件,在运行可执行文件之前清除了它们。我希望这对其他人有所帮助。

只需使用最新的pyinstaller。。。它有一个选项,可以在安装之前关闭现有正在运行的程序…在哪里?我在
pyinstaller.py
的参数和.spec中都没有看到它。此外,程序在上述代码运行后会自动关闭。您的Inno postinstall看起来是什么样子?
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