Inno Setup Query - добавление пути к реестру с помощью раздела [Registry] - PullRequest
0 голосов
/ 17 января 2011

Проблема в том, что когда я добавляю новый путь к старым данным (путям), используя {olddata};{app}\Lib\RAD2009", создается дублирующая запись.

Код:

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 в еще одном месте в реестре.

Library Path

А также я хочу добавить путь "{app} \ Lib \ RAD2009" к {olddata}, и при удалении я хочу удалить только "{app} \ Lib \ RAD2009", а не {olddata}

Заранее спасибо.

1 Ответ

3 голосов
/ 19 октября 2011

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;

Будьте осторожны с трейлингом / лидером ;.

...