Ветеран
Сообщения: 1133
Благодарности: 581
|
Профиль
|
Отправить PM
| Цитировать
Цитата R.i.m.s.k.y.:
Подскажите пожалуйста, как можно сохранить в Inno изменяемые ветки реестра перед установкой программы (желательно автоматом, уж больно много), и восстановить реестр при деинсталляции программы? »
|
Пример
Код:
[Setup]
AppName=RegBackup
AppVerName=Registry Backup
CreateAppDir=false
[Registry]
;если используется функция RegBackup, то желательно удалять ключ или параметр при деинсталляции (флаги deletevalue или uninsdeletekey), чтобы не оставались записи реестра, которых не было до установки.
Root: HKCU; SubKey: Control Panel\Desktop; ValueType: none; ValueName: Wallpaper; Flags: deletevalue uninsdeletevalue; BeforeInstall: RegBackup('HKCU\Control Panel\Desktop')
[Run]
Filename: {uninstallexe}; Flags: nowait postinstall; Description: Восстановить обои Рабочего стола; Parameters: /SILENT
Filename: {cmd}; Parameters: /C del /F /Q /AH IconCache.db; Flags: runhidden nowait; WorkingDir: {code:GetFolderByCSIDL|28}
[code]
function SystemParametersInfo(uAction, uParam: integer; pvParam: longint; fUpdateProfile: integer): boolean; external 'SystemParametersInfoA@user32';
// получить путь к папке. Пример: DestDir: {code:GetFolderByCSIDL|28}
function GetFolderByCSIDL(CSIDL: String): String;
begin
Result:= GetShellFolderByCSIDL(StrToInt(CSIDL), true);
end;
// Зарезервировать параметры указанного раздела реестра или Восстановить записи реестра из резервной копии
Procedure RegBackup(Path: String);
var
errCode, n: Integer;
RegExe, isKey: String;
Keys: TArrayOfString;
begin
RegExe:= AddBackslash(GetSystemDir) + 'reg.exe'
if not FileExists(RegExe) then begin
MsgBox('Registry backup not created' #13#10 'File reg.exe not found!', mbError, MB_OK);
Exit;
end;
isKey:= 'HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting('AppName')}_regBackup' {! InnoSetup удаляет чужие ключи в AppName_is1}
if Length(Path) > 0 then
Exec(RegExe,'copy '+ AddQuotes(Path) +' '+ AddQuotes(AddBackslash(isKey) + Path) +' /s /f','',sw_HIDE, ewWaitUntilTerminated, errCode)
else begin
if not RegGetSubkeyNames(HKLM, Copy(isKey, 6,Length(isKey)), Keys) then Exit; { нет резервных записей}
for n:= 0 to GetArrayLength(Keys) -1 do { reg.exe не может сохранять в корень реестра}
Exec(RegExe, 'copy '+ AddQuotes(AddBackslash(isKey) + Keys[n]) +' '+ Keys[n] +' /s /f','', sw_HIDE, ewWaitUntilTerminated, errCode)
RegDeleteKeyIncludingSubkeys(HKLM, Copy(isKey, 6,Length(isKey)))
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then SystemParametersInfo(20,0,0,2) { update Desktop}
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then begin
RegBackup(''); SystemParametersInfo(20,0,0,2)
end;
end;
|
-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.
Отправлено: 16:48, 22-06-2009
| #986
|