본문 바로가기

프로그래밍/Inno Setup

Inno Setup 시스템 환경변수 Path에 중복 안되게 경로 추가하기





고정 경로(ex. c:\foo)는 ExpandConstant함수 없이 성공하지만, {app} 같은 메크로 경로는 ExpandConstant 함수 없이 실패합니다.

이것 때문에 삽질을..


Param := ExpandConstant('{app}');


ExpandConstant 함수의 정확한 역할은 설명을 봐도 이해가 안되네요..

http://www.jrsoftware.org/ishelp/index.php?topic=isxfunc_expandconstant


24번째 라인에 Param 변수에 등록을 원하는 경로를 추가하면됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[Registry]
;시스템 변수
Root: "HKLM"; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};{app}"; Check: NeedsAddPath()
 
[PostCompile]
Name: "codesign.bat";
 
[Code]
function NeedsAddPath(): boolean;
var
  OrigPath: string;
  Param: string;
begin
  if not RegQueryStringValue(HKEY_LOCAL_MACHINE,
    'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
    'Path', OrigPath)
  then begin
    Result := True;
    exit;
  end; 
  Param := ExpandConstant('{app}');
  { look for the path with leading and trailing semicolon }
  { Pos() returns 0 if not found }
  Result := Pos(';' + Param + ';'';' + OrigPath + ';'= 0;
end;
cs



환경변수에 경로를 추가해도 바로 반영이 안되더군요..

[setup] 카테고리에 ChangesEnvironment=true 를 추가하면 재부팅없이 반영이 됩니다.


[setup]

ChangesEnvironment=true