![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перенос данных в реестре [D6, Win95/98, Win2k]
Speaker © (2003-08-29 10:29:00)
Суть вопроса.
По молодости, при написании проги, настройки сохранял не в том
ключе рееста (HKLM вместо HKCU). Сейчас сам софт переделал,
чтобы читал он настройки оттуда, откуда нужно, встала проблема,
как их быстро перенести из одного ключа в другой.
Ходить по всем раб. станциям и вручную делать экспорт/импорт
не хочется. Написал мелкий софт, который по моему мнению должен
помочь, но он не работает:
var rs, rl : TRegistry;
begin
rs := TRegistry.Create;
rl := TRegistry.Create;
try
rs.RootKey := HKEY_CURRENT_USER;
rl.RootKey := HKEY_LOCAL_MACHINE;
if rl.SaveKey( sRegString, "c:\12345678" ) then
begin
if rs.LoadKey( sRegString, "c:\12345678" ) then ShowMessage( "Исходный ключ реестра успешно скопирован." )
else ShowMessage( "Ошибка при переносе ключа реестра." );
end
else ShowMessage( "Ошибка при записи в файл." );
finally
rs.Free;
rl.Free;
end;
end;
на моем компе (W2K) говорит ошибку записи в файл (файл создается), но длина 0.
на раб. станциях (W98) файл создается, непустой, но говорит, что ошибка при переносе...
Я конечно, могу копировать не через файл, но тогда нужно это делать для
каждого параметра, а их до хрена да еще и переменное количество...
Может, кто подскажет чего?
P.S. Метод MoveKey не помогает, не хочет работать с разными ключами, по крайней мере мне не удалось его заставить.
Если корневой ключ одинаковый, то работает прекрасно.
clickmaker (2003-08-29 15:08:00) [1]
В НТ/2000 должна быть активизирована привилегия SE_BACKUP_NAME (см. AdjustTokenPrivileges).
Speaker (2003-08-29 10:49:00) [2]
2 HolACost!
Так а смысел? Я уже смотрел, они все производные от TRegistry.
А TRegistry пользует WinAPI RegLoadKey, RegSaveKey, с помощью
них я тоже пробовал, не получается. Проблема в том, что если
корневые ключи одинаковые, то все ок, а если разные то он похоже,
читает корень из файла, в котором записан предыдущий корень, и
пытается записать его в тот же ключ - в рез-те выдает ошибку...
HolACost! (2003-08-29 10:37:00) [3]
Если я правильно понял. то вам надо просто посмотреть файл исходников Registry и там есть такая класса, как TRegistryFile - вот попробуй с ней поплясать. может поможет!