2017-10-31 8 views
0

.nsi 파일을 가지고있는 eclipse rcp 제품을 사용하고 있습니다. 그래서 .nsi 파일의 환경 변수에 경로를 설정하고 싶습니다.시스템 재부팅없이 .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를 어떻게 설정할 수 있습니까?

답변

0
  • 하위 프로세스는 부모 환경을 상속합니다. 다음과 같이 설치 프로그램 환경을 업데이트 할 수 있습니다 : System::Call 'Kernel32::SetEnvironmentVariable(t "name", t "value")'.
  • 이 같은 다른 실행중인 응용 프로그램의 변경을 발표 할 수

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

    Explorer.exe에서 일반적으로이 메시지를 처리하고 환경을 다시로드 유일한 과정이다.

+0

위의 섹션에서 System :: Call을 추가해야하는 위치를 알려주시겠습니까? –

+0

어디서나 추가 할 수 있지만 설치 프로그램에서 시작한 설치 프로그램 및 하위 프로세스에만 적용되므로 완료 페이지에서 무언가를 실행하려는 경우 유용합니다. 다른 레지스트리 코드가 필요합니다. – Anders

+0

또한, 위에서 언급 한 동일한 섹션에서 환경 변수에서 경로를 제거하는 방법을 알려주시겠습니까? –