2012-02-15 4 views
1

Env 변수를 만든 다음 Win7 - 64 비트의 NSIS 설치 프로그램 스크립트에서 PATH 변수에 추가하고 있습니다. NSIS : 생성 된 환경 변수가 작동하지 않습니다.

Push "MyPath" 
Push "D:\MyFolder\bin;D:\MyFolder\lib" 
Call WriteEnvStr 

Push "%MyPath%" 
Call AddToPath 

지금 설치 후 나는 cmd를 프롬프트

MyPath=D:\MyFolder\bin;D:\MyFolder\lib 
Path=%MyPath%;<my existsing path> 

에서 변수 그러나 런타임에 찾을 수없는에서 모든 EXE/DLL을 모두 볼 수 있습니다. 관리자 권한으로 cmd 프롬프트를 실행 한 다음 exe를 실행하면 정상적으로 실행됩니다. exe를 관리자 권한으로 직접 실행해도 작동합니다.

환경 편집기를 열면 MyPath 변수를 두 번 클릭하고 아무 것도 변경하지 않고 확인을 클릭하면 내 exe가 관리자 권한으로 실행되지 않고 잘 실행됩니다. 내가 cmd를 프롬프트에서 경로를 확인하는 경우 그리고 지금, MYPATH 변수는 내가 추가 ENV 변수를 생성 한 후 "EnvVarUpdate 전화"시도

MyPath=D:\MyFolder\bin;D:\MyFolder\lib 
Path=D:\MyFolder\bin;D:\MyFolder\lib;<my existsing path> 

치환 그러나 그것은 작동하지 않습니다.

것은 내가 NSIS 유니 코드 버전/추가는 레지스트리를 사용하여 훨씬 더 큰 것 절단에 의해 경로에 데이터의 손실없이 경로를 수정 2.46.3

+1

SuperUser에서 NSIS 문제는 아니지만 env에 문제가있는 것으로 보이는 답변을 보았습니다. 다른 env 내의 변수. 변하기 쉬운. 그것이 얼마나 진실인지 모르겠습니다. – vinaym

답변

-2
${EnvVarUpdate} $0 "PATH" "A" "HKLM" "C:\Program Files\Java\jre6\bin" 

StrCpy $R0 "$0" 

System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("PATH", R0).r2' 

ReadEnvStr $R0 "PATH" 

ExecWait "$INSTDIR\tmp\batchfile.bat 
0

기회를 사용하고 있습니다.

ReadRegStr $0 HKCU "Environment" Path 
StrCpy $1 "D:\MyFolder\bin;D:\MyFolder\lib" 
StrCpy $2 "$0;$1" 
WriteRegStr HKCU "Environment" Path "$2" 

시스템이 다음 AUTOEXEC.BAT에서 설정을 어떤 경로도 % PATH % 환경 변수에 추가 될 것 AUTOEXEC.BAT 파일이있는 경우. 이는 PATH를 설정해야하는 이전 설치 루틴과의 호환성을 제공하기위한 것입니다. 그러나 AUTOEXEC.BAT의 다른 모든 명령은 무시됩니다. 그리고 이것은 다소간 더 이상 쓸모가 없습니다.

그러나 우리는 당신의 방법을 계속할 수는 있지만 목표를 달성하기위한 다른 방법을 시도해 볼 수 있습니다. 나는이 테스트를하지 않은하지만 당신은이 비슷한 시도 할 수 있습니다 :

StrCpy $R0 "MYPATH" 
StrCpy $R1 "D:\MyFolder\bin;D:\MyFolder\lib" 
System::Call `Kernel32::SetEnvironmentVariable(t"$R0",t"$R1")` 

이제 다음과 같은 경로에 새 변수를 포함를 :

ReadEnvStr $R0 COMSPEC 
ReadEnvStr $R1 MYPATH 
ExecDos::Exec /TOSTACK `"$R0" /c "SetX PATH=%PATH%;$R1 -m"` 

은 이제 쉽게 변경할 수 있습니다 하나의 변수 %의 MYPATH 그 %로 설정하면 PATH에 새 값이 반영됩니다.

관련 문제