[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; |
<참조>