2011-01-17 5 views
0

Das Problem ist, wenn ich den neuen Pfad an die alten Daten (Pfade) mit {olddata};{app}\Lib\RAD2009" anhängen, erstellt es doppelte Eintrag.Inno-Setup-Abfrage Hinzufügen eines Pfads zu der Registrierung mit [Registrierung] Abschnitt

Code:

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

Similary, ich bin writting diesen Weg heißt {app}\Lib\RAD2009 an einem weiteren Platz in der Registry.

Library Path

Und auch ich will den Pfad "{app} \ Lib \ RAD2009", um die {olddata} anhängen und bei der Deinstallation, möchte ich nur die "{app} \ Lib \ RAD2009" löschen und nicht {olddata}

Vielen Dank im Voraus.

+0

Ich habe versucht, Ihren Code und InnoSetup den Wert korrekt hinzugefügt, bis ich es ein zweites Mal ohne Deinstallation ausgeführt. Wenn der hinzugefügte Wert bereits existiert und das Setup erneut ausgeführt wird, sehe ich den Wert ein zweites Mal. Sofern Sie den Wert bei der Deinstallation entfernen, müssen Sie den Registrierungswert lesen, den gewünschten Wert entfernen und ihn dann erneut schreiben. Ich habe dafür aber keinen Code. – mirtheil

+0

Danke Mirtheil für die Antwort ... ja es fügt den Pfad das zweite mal hinzu, da ich bei der Deinstallation das Flag "uninsdeletevalue" nicht angegeben habe, wenn ich gebe, dass es bei der Deinstallation alle Pfade löschen würde. So gibt es einen Weg, bei dem ich nur den Pfad beim Deinstallieren löschen kann und nicht alle Pfade ({olddata}) ... – user578219

+0

Etwas ähnlich wie http://stackoverflow.com/questions/3304463/how-do-i- modify-the-path-environment-variable-Wenn-running-a-inno-setup-install –

Antwort

3

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

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

Seien Sie vorsichtig mit Hinter/führenden ;.

Verwandte Themen