对于我的软件(仅适用于Windows),我使用NSIS创建了一个安装程序。为了让软件正常工作,我将python(3.6.5版)作为第三方软件(.exe文件)提供。此外,我需要进行pip升级并安装一些模块(例如NumPy)
我对NSIS安装程序的方法如下:
运行可执行python安装程序:在我的安装程序中,提醒用户将python添加到环境%path%变量中。提取所有文件后,将执行python第三方安装程序。Python已安装并添加到%path%
python -m pip install --upgrade pip
python -m pip install numpy
否则它只打印“python not found”和整个path环境变量
在NSIS中,其实现方式如下(简化):
SetOutPath "$INSTDIR\python"
File "D:\python\python-3.6.5.exe"
ExecWait '"$INSTDIR\python\python-3.6.5.exe" InstallAllUsers=1 PrependPath=1'
Sleep 500
File "D:\python\PythonSetup.exe"
ExecWait '"$INSTDIR\python\PythonSetup.exe" $INSTDIR'
Sleep 500
SetOutPath "$INSTDIR"
Delete "$INSTDIR\python\python-3.6.5.exe"
Delete "$INSTDIR\python\PythonSetup.exe"
RmDir "$INSTDIR\python"
我的问题是:
PythonSetup.exe
在%path%变量中找不到python目录。打印我从Windows.h
使用GetEnvironmentVariable
得到的路径,我可以看到它得到的路径实际上不包含python目录李>'python.exe' is not recognized as an internal or external command, operable program or batch file.
System Properties > Advanced > Environment Variables
中检查%path%变量表明python目录确实已添加到path变量中。我在PyhtonSetup.exe
的运行时检查了这一点,即在NSIS行ExecWait '"$INSTDIR\python\PythonSetup.exe" $INSTDIR'
期间李>PythonSetup.exe
工作正常李>我试过了
Sleep
python.exe
,例如C:\Program Files\python36-32\python.exe -m pip install numpy
是否有人知道在PythonSetup.exe
中GetEnvironmentVariable
返回的路径中找不到python目录的原因,同时可以在系统属性中看到它?
我觉得我可能错过了一些明显的东西
当用户登录Windows时,从注册表的用户和计算机部分读取环境变量,并使用这些合并的变量启动初始进程。创建新进程时,它将继承其父进程的环境(除非在启动进程时指定新的自定义环境)
应用程序应该在更改环境时广播WM_SETTINGCHANGE消息,但实际上Explorer是唯一侦听此消息并动态更新其环境的应用程序。这样做的一个主要原因是,Explorer使用一个未记录的函数来执行此更新,而其他应用程序实现相同的功能是一个很大的难题
对于使用自定义变量的应用程序,很容易在安装程序中设置此值,以便由启动的子进程继承:
由于各种原因,以同样的方式更新%PATH%很棘手:
我在安装程序中更新%PATH%的唯一建议是使用EnVar plug-in:
相关问题 更多 >
编程相关推荐