본문 바로가기

개발 관련

[inno setup] uninstall 할때 환경변수의 PATH에 세팅해놓은 값 삭제하기

[inno setup] uninstall 할때 환경변수의 PATH에 세팅해놓은 값 삭제하기


 

Inno Setup [Code] 란에 아래를 작성한다.

 

먼저, uninstall 할 경우 실행될 코드 작성

CurUninstallStepChanged

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);

begin

           // only run during actual uninstall

           if CurUninstallStep = usUninstall then begin

               DeletePath();

           end;

end;

 

 

그리고 아래 코드를 작성한다.

아래 코드는 현재 PATH의 value()을 얻어와서(oldPath), ‘;’를 구분자로 각각의 path를 읽은 후에

삭제하려는 path(MyPath)값만 삭제하는 코드이다.

DeletePath

function DeletePath(): boolean;

var

  oldPath: string;

  newPath: string;

  MyPath: string;

  pathArr: TArrayOfString;

  pathDir: TArrayOfString;

  i: Integer;

  regroot: Integer;

  regpath: string;

begin

  MyPath := ExpandConstant('{userappdata}');

  MyPath := MyPath + '/temp/';

  //MsgBox(MyPath, mbConfirmation, MB_OK);

  regroot := HKEY_CURRENT_USER;

  regpath := 'Environment';

  if not RegQueryStringValue(regroot,

    regpath,

    'PATH', oldPath)

  then begin

    Result := True;

    exit;

  end;

 

 

  //기존 PATH에서 MyPath에 해당하는 문자열을 삭제

  i := 0;

  while (Pos(';', oldpath) > 0) do begin

           SetArrayLength(pathArr, i+1);

           pathArr[i] := Copy(oldpath, 0, Pos(';', oldpath)-1);

           oldpath := Copy(oldpath, Pos(';', oldpath)+1, Length(oldpath));

           i := i + 1;

 

           // Check if current directory matches app dir

           if MyPath = pathArr[i-1] then begin

                        continue;

           end;

 

           // Add current directory to new path

           if i = 1 then begin

                      newpath := pathArr[i-1];

           end else begin

                      newpath := newpath + ';' + pathArr[i-1];

           end;

end;

// Write new path

RegWriteStringValue(regroot, regpath, 'Path', newpath);

end;

 


<참조>

http://legroom.net/files/software/modpath.iss