Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Реестр не восстанавливается. RestoreKey = false.


И. Павел ©   (2010-07-26 16:05:00) 

Здравствуйте.

Моя программа должна выполнять следующие действия:
1. Сохранить текущий почтовый клиент и ассоциацию программ с расширениями .tif и .tiff
2. Установить ms office standard
3. Удалить ms office, который стоял раньше
4. Восстановить прежний почтовый клиент и ассоциацию программ с расширениями .tif и .tiff

Сохраняю и восстанавливаю реестр так: http://paste.org.ru/?0wg8w5

Но несколько раз реестр не восстановился. То есть RestoreKey вернул false.

Один раз я запустил программу от system - реестр не восстановился (вернуло ошибку именно восстановление .tiff, т.е. все предыдущие ветки восстановились). После второго запуска восстановилось все…

Подскажите, пожалуйста, в чем может быть ошибка, и как это можно исправить? Может быть, для восстановления реестра нужны дополнительные привилегии, кроме SeRestorePrivilege?

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


И. Павел   (2010-07-27 08:55:00) [1]

> [8] DVM ©   (26.07.10 23:01)

Большое спасибо.
Хоть вы не стали флудить.
Я попробовал добавить еще и  SeBackupPrivilege и SeDebugPrivilege (и вообще - подключил все привилегии, какие нашел и какие не вызывали ошибку при подключении) - но .tif все равно не восстановился.
Насколько я понимаю - манифест нужен в случае UAC (а это Vista и Windows7), а у меня Windows XP, а пользователь - system, а у него, наверное, всегда все права.

Похоже, раздел реестра .tif перестает восстанавливаться, если вручную назначить соответствующую этому расширению программу в свойствах папки.
Раздел HKEY_LOCAL_MACHINE\SOFTWARE\Classes\mailto восстанавливается всегда, а вот HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.tif при восстановлении возвращает ошибку, хотя оба они расположены в HKEY_LOCAL_MACHINE и права у system на оба раздела одни и те же: полный доступ...

Я сделал так:
1. Удалил ветку .tif
2. Создал ветку .tif
3. Восстановил ветку .tif
Так работает :) Хотя я и не понимаю, почему не сработало простое восстановление. Буду рад, если кто-нибудь мне это объяснит.


Германн   (2010-07-27 02:39:00) [2]


> Плохиш ©   (27.07.10 02:26) [10]
>
> И не лень всякую фигню с помойки скачивать, да ещё и её
> читать?
>

Это же "Начинающие". Будь снисходительнее.


Плохиш   (2010-07-27 02:26:00) [3]

И не лень всякую фигню с помойки скачивать, да ещё и её читать?


Германн   (2010-07-26 23:08:00) [4]


>
> Это сообщение попадет в лог, если не сработают все остальные.
> .. Там куча всяких сообщений, учитывающих возникновение
> ошибок почти в каждой функции. Вы исходники посмотрите -
>  они напичканы вызовами WriteLog.

И что?
неужели трудно написать так:

try
 ...
except
 on E : Exception do
   WriteLog('При чтении данных из реестра возникла ошибка - ' + E.Message);
end;


Loginov Dmitry   (2010-07-26 23:01:00) [5]


> Это сообщение попадет в лог, если не сработают все остальные.
> .. Там куча всяких сообщений, учитывающих возникновение
> ошибок почти в каждой функции. Вы исходники посмотрите -
>  они напичканы вызовами WriteLog.



> WriteLog('Во время выполнения программы произошла ошибка.
> ', true);


Какая ошибка произошла во время выполнения программы? Зачем скрывать текст ошибки?


> r.LazyWrite := false;


Зачем так мучать реестр, особенно при его бэкапе?


DVM   (2010-07-26 23:01:00) [6]


> И. Павел ©

1) В программу добавь манифест чтобы запрашивалось повышение прав до админа
2) Получи привилегии:  SeBackupPrivilege, SeRestorePrivilege, и до кучи SeDebugPrivilege.
3) Я бы сохранял реестр в нормальном формате REGEDIT4 или 5 а не в этом дурацком бинарном.


DVM   (2010-07-26 22:54:00) [7]


> И. Павел ©

Привилегии надо полагать ты все уже получил?


И. Павел   (2010-07-26 21:28:00) [8]


> Заказчик велел в лог писать бессмысленную белиберду вместо
> точного описания ошибки?

Это сообщение попадет в лог, если не сработают все остальные... Там куча всяких сообщений, учитывающих возникновение ошибок почти в каждой функции. Вы исходники посмотрите - они напичканы вызовами WriteLog.


Германн   (2010-07-26 21:08:00) [9]


> А если вы про организацию логов, то так велел заказчик.

Заказчик велел в лог писать бессмысленную белиберду вместо точного описания ошибки?


И. Павел   (2010-07-26 20:42:00) [10]


> Anatoly Podgoretsky ©   (26.07.10 20:22) [2]

Поправил текст сообщения об ошибке (я спутался, там, конечно, не "чтение" а "запись", и еще Free в функции чтения должен быть в Finally). А если вы про организацию логов, то так велел заказчик.

Функции чтения/записи реестра: http://paste.org.ru/?h906fh
Вся программа: http://paste.org.ru/?7gnn4o


Anatoly Podgoretsky   (2010-07-26 20:22:00) [11]

> И. Павел  (26.07.2010 16:05:00)  [0]

Вот это     WriteLog('При чтении данных из реестра возникла ошибка.',
false);
отбило какое либо желание смотреть код.


И. Павел   (2010-07-26 16:16:00) [12]

На всякий случай - вот весь код программки: http://paste.org.ru/?z3g4jw


Наверх

Титульная страница Поиск, карта сайта Написать письмо