在没有系统重启的情况下设置.nsi文件中的环境路径

时间:2017-10-31 06:28:00

标签: environment-variables eclipse-rcp nsis

我们正在使用具有.nsi文件的eclipse rcp产品。 所以,我想在.nsi文件中设置环境变量的路径。

我写了下面的代码:

Section "-Environment"
ReadRegStr $1 HKCU "Environment" "PATH"
;DetailPrint $1
StrCpy $0 $INSTDIR\MKS_Standalone\mkssi
;DetailPrint $0
StrLen $2 $1
;DetailPrint $2
StrLen $3 $0
;DetailPrint $3
IntOp $5 $5 & $5
IntOp $6 $2 - $3
;DetailPrint $6
IntCmp $2 0 labelWrite
labelLoop:
;DetailPrint $5/$6
StrCpy $4 $1 $3 $5
;DetailPrint $4
;DetailPrint $0
StrCmp $4 $0 labelEnd
IntOp $5 $5 + 1
IntCmp $6 $5 labelAdd labelAdd
Goto labelLoop
    labelAdd:
WriteRegExpandStr HKCU "Environment" "PATH" $1;$INSTDIR\MKS_Standalone\mkssi
DetailPrint "Adding path environment."
Goto labelEnd
    labelWrite:
WriteRegExpandStr HKCU "Environment" "PATH" $INSTDIR\MKS_Standalone\mkssi
DetailPrint "Adding path environment."
    labelEnd:

SectionEnd

这段代码是在环境变量中添加路径,但仅在重启机器后才添加。 由于我的应用程序在多台计算机上运行,​​因此无法重新启动计算机以更新路径变量。

如何在没有系统重启的情况下使用nsis设置PATH?

1 个答案:

答案 0 :(得分:0)

  • 子进程继承其父对象环境。您可以像下面这样更新安装程序环境:System::Call 'Kernel32::SetEnvironmentVariable(t "name", t "value")'
  • 您可以宣布对其他正在运行的应用程序的更改,如下所示:

    !include WinMessages.nsh
    SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000`
    

    Explorer.exe通常是处理此消息并重新加载其环境的唯一进程。