[inno setup] PATH 환경 변수 수정하기
이노셋업에서 [Registry] 섹션에서 환경 변수를 설정할 수 있습니다.
이렇게...
[Registry]
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment";
ValueType: expandsz; ValueName: "Path"; ValueData: C:\foo"
그런데 위의 셋업은 단순히 Path에 'C:\foo'를 설정하는 것이라서,
다른 환경 변수는 모두 사라지고 C:\foo만 남게 됩니다.
그래서 기존 데이터에 추가하고 싶으면 아래처럼,
[Registry]
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment";
ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};C:\foo"
그런데 또 다른 문제가 있습니다.
셋업을 하면 할수록 계속 "C:\foo"가 추가 된다는 거죠
이때 'Check' 파라미터를 사용할 수 있습니다.
[Registry]
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment";
ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};C:\foo";
Check: NeedsAddPath('C:\foo')
NeedsAddPath는 함수 입니다.
[Code]
function NeedsAddPath(Param: string): boolean;
var
OrigPath: string;
begin
if not RegQueryStringValue(HKEY_LOCAL_MACHINE,
'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
'Path', OrigPath)
then begin
Result := True;
exit;
end;
// look for the path with leading and trailing semicolon
// Pos() returns 0 if not found
Result := Pos(';' + Param + ';', ';' + OrigPath + ';') = 0;
end;
시스템 환경 변수의 값을 읽어와서 입력하려는 문자열과 비교하여 true/false를 리턴합니다.
그리고,
{app}나, {userappdata}와 같은 변수로부터 실제 값을 얻어오려면, ExpandConstant( ) 함수를 사용하면 됩니다.
var
Path : string
begin
Path := ExpandConstant(Param)
마지막으로,
시스템 환경 변수와 사용자 환경 변수의 위치는 다음과 같습니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
HKEY_CURRENT_USER\Environment
입니다.
참고