Вопрос Резервная копия реестра

Хамик

Старожил
Подскажите как сделать резервную копию ключей реестра? Резервную копию надо сохранить в реестре. Допустим имеем такой ключ HKEY_CURRENT_USER\SOFTWARE\APOSTOL надо его забекапить в HKEY_CURRENT_USER\SOFTWARE\APOSTOL_BACKUP, но при этом не удалять резервируемый ключ.
 

Krinkels

Он где то тут
Администратор
Как вариант:
Открываем нужный ключ, строим список всех подключей, копируем их на новое место, далее строим список параметров содержащихся в подключе, копируем и их на новое место.

З.Ы. Может для этого есть какая то спецфункция, но лично я такой не знаю
 

Хамик

Старожил
Как вариант:
Открываем нужный ключ, строим список всех подключей, копируем их на новое место, далее строим список параметров содержащихся в подключе, копируем и их на новое место.

З.Ы. Может для этого есть какая то спецфункция, но лично я такой не знаю
Это понятно. Как-бы программно все это сделать?
 

Krinkels

Он где то тут
Администратор
Можно все это попробовать сварганить на инно, или написать плагин. Но лично я не могу ни то ни другое, по независящим от меня причинам
 

sergey3695

Ветеран
Модератор
Хамик, экспорт реестра делай. и reg файл в нужную папку.
 

sergey3695

Ветеран
Модератор
Ну почему же. Экспорт. Сохранить reg. Подредактировать. Добавить в реестр. Все же проще.
 

Хамик

Старожил
С помощью RegQueryStringValue, RegGetSubkeyNames можно реализовать данный замысел?
 

Хамик

Старожил
Snoopak96, Спасибо! Пригодится! А в реестре никак не можно сделать бэкап?
 

Snoopak96

Старожил
Хамик,
что мешает сделать так?
Код:
 RegBackupTofile(HKEY_LOCAL_MACHINE, 'Software\1C', ExpandConstant('{app}\RegBackup.dat'), true);
 RegRestorefromfile(HKEY_LOCAL_MACHINE, 'Software\1C_BackUp', ExpandConstant('{app}\RegBackup.dat'), true);
 DeleteFile(ExpandConstant('{app}\RegBackup.dat'));
 

Хамик

Старожил
что мешает сделать так?
Вроде и работает, но постоянно несколько раз появляется сообщение "Ошибка чтения файла".
Код:
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
RegBackupTofile(HKEY_LOCAL_MACHINE, 'Software\WinRAR', ExpandConstant('{app}\RegBackup.dat'), true);
RegRestorefromfile(HKEY_LOCAL_MACHINE, 'Software\WinRAR_BackUp', ExpandConstant('{app}\RegBackup.dat'), true);
DeleteFile(ExpandConstant('{app}\RegBackup.dat'));
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
RegBackupTofile(HKEY_LOCAL_MACHINE, 'Software\WinRAR_BackUp', ExpandConstant('{app}\RegBackup.dat'), true);
RegRestorefromfile(HKEY_LOCAL_MACHINE, 'Software\WinRAR', ExpandConstant('{app}\RegBackup.dat'), true);
DeleteFile(ExpandConstant('{app}\RegBackup.dat'));
RegDeleteKeyIncludingSubkeys(HKLM, 'Software\WinRAR_BackUp');
end;
 

Snoopak96

Старожил
RegEdit закрой у себя на компе, комментарии же написал, привилегия редактирования реестра не доступна если реестр открыт в RegEdit. После всех манипуляций открывай только редактор реестра.

Код:
if RegRestoreKey(phkResult, infile, 0) > 0 then MsgBox('Ошибка чтения файла', mbInformation, MB_OK);  //RegEdit при вызове должен быть закрыт иначе вернёт отказ в доступе
 

Snoopak96

Старожил
Хамик,
ну реестр занят каким-то процессом, так сделай:
Код:
if RegRestoreKey(phkResult, infile, 0) > 0 then MsgBox(inttostr(RegRestoreKey(phkResult, infile, 0)), mbInformation, MB_OK);
если массага выдаст "5" - то это отказ доступа. Другим может редактором реестр открыл.
 

Snoopak96

Старожил
2:ERROR_FILE_NOT_FOUND - не найден файл
3:ERROR_PATH_NOT_FOUND - не найден путь
реестр экспортируй в reg и сюда залей
нет, на анси у меня тоже пашет
ёмаё я ж на анси не проверял :lol: может по этому

 
Последнее редактирование:

Хамик

Старожил

Вложения

Сверху