2011-01-17 4 views
0

을 사용하여 레지스트리에 경로 추가하기 {olddata};{app}\Lib\RAD2009"을 사용하여 이전 경로 (경로)에 새 경로를 추가 할 때 문제가 발생하여 중복 된 항목이 생성됩니다.Inno Setup Query- [레지스트리] 섹션

코드 :

Root: HKCU; Subkey: Software\CodeGear\BDS\6.0\Library; ValueType: string; ValueName: Search Path; ValueData: "{olddata};{app}\Lib\RAD2009"; Flags: dontcreatekey; Tasks: RAD2009

Similary, 나는 레지스트리에서 또 하나 개의 장소에서이 경로 즉 {app}\Lib\RAD2009을을 writting하고있다.

Library Path

는 그리고 또한 나는 {olddata} 및 제거하는 동안, 나는 단지 삭제할 "{응용 프로그램을} \ lib 디렉토리 \ RAD2009"경로 "{응용 프로그램} \ lib 디렉토리 \ RAD2009"를 추가하려면 not {olddata}

미리 감사드립니다.

+0

나는 코드를 시험해 보았고 InnoSetup은 값을 올바르게 추가했다. 제거하지 않고 두 번째로 실행했다. 추가되는 값이 이미 존재하고 설치 프로그램이 다시 실행되면 두 번째로 추가 된 값이 표시됩니다. 제거 할 때 값을 제거하는 경우 레지스트리 값을 읽고 원하는 값을 제거한 다음 다시 값을 다시 써야합니다. 나는 그것에 대한 어떤 코드도 없다. – mirtheil

+0

답변을 주신 Mirtheil에게 감사드립니다 ... 예. 제거하는 동안 플래그를 "uninsdeletevalue"로 지정하지 않았으므로 경로를 두 번째로 추가합니다. 제거하는 동안 모든 경로가 삭제되기 때문에 제거해야합니다. 그래서 제거하는 동안 모든 경로 ({olddata})가 아닌 경로 만 삭제할 수있는 방법이 있습니다 ... – user578219

+0

http://stackoverflow.com/questions/3304463/how-do-i-와 다소 유사합니다. 경로 환경 변수 수정 - 실행 중 - 설치 - 설치 - 실행 –

답변

3

http://code.haskell.org/gtk2hs/tools/win32/gtk2hs.iss

[Registry] 
Root: HKCU; Subkey: "Environment"; ValueName: "Path"; ValueType: "string"; ValueData: "{app}\bin;{olddata}"; Check: NotOnPathAlready(); Flags: preservestringtype; 

[Code] 
function NotOnPathAlready(): Boolean; 
var 
    BinDir, Path: String; 
begin 
    Log('Checking if Gtk2Hs\bin dir is already on the %PATH%'); 
    if RegQueryStringValue(HKEY_CURRENT_USER, 'Environment', 'Path', Path) then 
    begin // Successfully read the value 
    Log('HKCU\Environment\PATH = ' + Path); 
    BinDir := ExpandConstant('{app}\bin'); 
    Log('Looking for Gtk2Hs\bin dir in %PATH%: ' + BinDir + ' in ' + Path); 
    if Pos(LowerCase(BinDir), Lowercase(Path)) = 0 then 
    begin 
     Log('Did not find Gtk2Hs\bin dir in %PATH% so will add it'); 
     Result := True; 
    end 
    else 
    begin 
     Log('Found Gtk2Hs bin dir in %PATH% so will not add it again'); 
     Result := False; 
    end 
    end 
    else // The key probably doesn't exist 
    begin 
    Log('Could not access HKCU\Environment\PATH so assume it is ok to add it'); 
    Result := True; 
    end; 
end; 

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); 
var 
    BinDir, Path: String; 
begin 
    if (CurUninstallStep = usPostUninstall) 
    and (RegQueryStringValue(HKEY_CURRENT_USER, 'Environment', 'PATH', Path)) then 
    begin 
    BinDir := ExpandConstant('{app}\bin'); 
    if Pos(LowerCase(BinDir) + ';', Lowercase(Path)) <> 0 then 
    begin 
     StringChange(Path, BinDir + ';', ''); 
     RegWriteStringValue(HKEY_CURRENT_USER, 'Environment', 'PATH', Path); 
    end; 
    end; 
end; 

이/후행 ;을 선도하고 조심 보여줍니다.

관련 문제