我正在从 NSIS 安装程序中设置永久环境变量,如NSIS wiki中所述。这按预期工作,安装后该变量可用于新进程。
但是,当使用选项在安装结束时启动已安装程序时,环境变量对于从安装程序启动的程序不可用。我认为这是因为从那里启动的程序将安装程序进程作为父进程并获得相同的环境块(请参阅createProcess函数的 lpEnvironment 参数)。
如何让从安装程序最后一页启动的程序看到新设置的环境变量?而是编写自定义启动功能?该文档没有说明该Exec
函数的环境块。
我正在从 NSIS 安装程序中设置永久环境变量,如NSIS wiki中所述。这按预期工作,安装后该变量可用于新进程。
但是,当使用选项在安装结束时启动已安装程序时,环境变量对于从安装程序启动的程序不可用。我认为这是因为从那里启动的程序将安装程序进程作为父进程并获得相同的环境块(请参阅createProcess函数的 lpEnvironment 参数)。
如何让从安装程序最后一页启动的程序看到新设置的环境变量?而是编写自定义启动功能?该文档没有说明该Exec
函数的环境块。
如果您希望子进程继承(更新的)环境,您还需要使用临时设置环境变量代码,因为只有 explorer.exe 响应 WM_WININICHANGE 通知。
outfile "test.exe"
name "run env test"
requestexecutionlevel user
!define MUI_FINISHPAGE_RUN "cmd.exe"
!define MUI_FINISHPAGE_RUN_PARAMETERS "/k set foobar"
!include MUI2.nsh
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "English"
Section
System::Call 'Kernel32::SetEnvironmentVariable(t "FooBar",t "BazBlargh")i'
SectionEnd