【问题标题】:Setting env var in NSIS, not visible in program launched from installer在 NSIS 中设置 env var,在从安装程序启动的程序中不可见
【发布时间】:2012-07-17 22:18:02
【问题描述】:

我正在从 NSIS 安装程序设置永久环境变量,如 NSIS wiki 中所述。这按预期工作,安装后该变量可用于新进程

但是,当使用在安装结束时启动已安装程序的选项时,环境变量不适用于从安装程序启动的程序。我认为这是因为从那里启动的程序将安装程序进程作为父进程并获得相同的环境块(请参阅createProcess 函数的 lpEnvironment 参数)。

如何让从安装程序最后一页启动的程序看到新设置的环境变量?而是编写自定义启动功能?文档没有说明 Exec 函数的环境块。

【问题讨论】:

  • 创建进程时不能让父级为NULL吗?
  • 我自己没有创建流程,它隐藏在某处 NSIS 核心功能的魔力中。这也只是对幕后发生的事情的猜测。

标签: environment-variables nsis


【解决方案1】:

如果您希望子进程继承(更新的)环境,您还需要使用临时设置环境变量代码,因为只有 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

【讨论】:

  • 太棒了。我非常专注于“将它们设置为永久”替代方案,以至于我完全忽略了使用 both 的这种相当明显的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2015-12-13
相关资源
最近更新 更多