좋아, 내 nsi 스크립트의 단순화 된 버전이 있습니다 (아래 참조). A2 섹션에서 하나의 실행 파일을 지정된 설치 경로에 복사하고 환경 변수를 만든 다음 현재 실행중인 모든 프로세스가 env 변경을 인식하도록하는 SendMessage를 수행합니다. 그러나, 내가 링크 섹션에서 만든 바로 가기가 작동하지 않기 때문에 NSIS 설치 과정 자체가 업데이트되지 않는 것 같다환경 변수를 사용하는 NSIS CreateShortcut
installer.nsi :
다음SetCompressor /FINAL zlib
!include LogicLib.nsh
!include WinMessages.nsh
!include x64.nsh
!define ENGINE "TEST"
!define DERIV "A2"
!define LIB_VER "v43"
!define RELEASE "v3dev2"
Name "${ENGINE}${DERIV} DTE ${RELEASE}"
OutFile "${ENGINE}${DERIV}-DTE.exe"
; display the installation directory page
; note that NSIS places the selected directory in $INSTDIR
; DirText ""
Page directory setDefaultInstallDirectory
Function setDefaultInstallDirectory
;check for an existing sim root and set it as
the default installation directory if it exists
ReadEnvStr $1 SIM_ROOT
${If} $1 != ""
StrCpy $INSTDIR $1
${EndIf}
FunctionEnd
; display the installation page and show a message
; when the installation is complete
Page instfiles "" "" finished
Function finished
MessageBox MB_OK "Installation Complete."
FunctionEnd
section "A2"
SetOutPath $INSTDIR\${ENGINE}\${DERIV}
File alt_control.exe
; Environment Variables
WriteRegStr HKCU "Environment" "SIM_ROOT" "$INSTDIR"
WriteRegStr HKCU "Environment" "ENGINE" "${ENGINE}"
WriteRegStr HKCU "Environment" "DERIV" "${DERIV}"
WriteRegExpandStr HKCU "Environment" "RUN_DIR" "%SIM_ROOT%\%ENGINE%\%DERIV%"
; Broadcast to all processes that they need to update their environment
; http://forums.winamp.com/showthread.php?t=118501
SendMessage ${HWND_BROADCAST}
${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
sectionEnd
section "Links"
; create the start menu directory & shortcuts
CreateDirectory $SMPROGRAMS\DTE
SetOutPath "$INSTDIR"
CreateShortCut "$SMPROGRAMS\DTE\AltControl.lnk"
"$INSTDIR\%ENGINE%\%DERIV%\alt_control.exe"
; Broadcast to all processes that they need to update their environment
; http://forums.winamp.com/showthread.php?t=118501
SendMessage ${HWND_BROADCAST}
${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
sectionEnd
설치 프로그램을 실행 한 후, 시작 메뉴 바로 가기 AltControl.lnk를 실행하려고하면 Windows에 바로 가기 오류가 발생합니다. 구체적으로 : "Windows가 alt_control.exe를 검색하고 있습니다. 파일을 직접 찾으려면 찾아보기를 클릭하십시오."
설치를 수행 할 때 환경 변수가 이미 있으면 링크가 작동합니다. 심지어 더 이상한, 시작 메뉴 바로 가기 속성을 클릭하고 사소한 변경 (추가 및 주석 필드의 공백 제거)을 누른 다음 적용을 클릭하면 Windows AltControl.lnk 파일을 다시 생성하는 것 같습니다 (.lnk 파일 대화 상자를 통해 아무런 기능적 변화가 없었음에도 불구하고 크기가 커졌습니다!). 그래서 그것은 NSIS 또는 생성/해결 .lnk 파일을 담당하는 일부 배경 Windows 프로세스가 설치 프로세스 중에 새로 생성 된 환경 변수를 선택하지 않는 것 같습니다. 나는 웹을 샅샅이 뒤졌고, 내가 사용하고있는 SendMessage가 새로 생성 된 env 변수를 모두 알아야한다는 것을 나타낼 것 같다. 누구든지이 수수께끼를 푸는 데 미리 감사드립니다. 포함 된 installer.nsi 스크립트를 사용하여 제 상황을 복제 할 수 있습니다. 또한 여러 환경 (XP, Vista, 7, 관리자 있음/없음 등)에서이 동작을 나타냅니다.
와우는 - 확인하는 전화가 .LNK을 강제로 추가하는 작업! 만세! :) 그러나 시스템 변수 -> 고급 -> 환경 변수에서 변수를 정의하려면 WriteRegStr 호출을해야합니다. 예상된다면 큰 문제가 아닙니다. 너는 생명의 은인이야! Preesh! – arette
네, 시스템 콜은 설치 프로그램 프로세스를위한 것입니다 ... – Anders
다시 한번 감사드립니다. - 이것으로 다른 사람들을 도울 것입니다. – arette