Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.10.17;
Скачать: CL | DM;

Вниз

Реестр не восстанавливается. RestoreKey = false.   Найти похожие ветки 

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

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

Моя программа должна выполнять следующие действия:
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-26 16:16) [1]

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


 
Anatoly Podgoretsky ©   (2010-07-26 20:22) [2]

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

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


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


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

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

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


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


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

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


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


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

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


 
DVM ©   (2010-07-26 22:54) [6]


> И. Павел ©

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


 
Loginov Dmitry ©   (2010-07-26 23:01) [7]


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



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


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


> r.LazyWrite := false;


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


 
DVM ©   (2010-07-26 23:01) [8]


> И. Павел ©

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


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


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

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

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


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

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


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


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

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


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

> [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
Так работает :) Хотя я и не понимаю, почему не сработало простое восстановление. Буду рад, если кто-нибудь мне это объяснит.



Страницы: 1 вся ветка

Текущий архив: 2010.10.17;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.01 c
2-1280136272
Jacksotnik
2010-07-26 13:24
2010.10.17
Помогите с SELECT INTO OUTFILE


2-1279637266
Xandr001
2010-07-20 18:47
2010.10.17
Помогите выбрать тип данных


8-1206713265
VBit
2008-03-28 17:07
2010.10.17
Включение линейного входа


3-1246354424
Дмитрий Белькевич
2009-06-30 13:33
2010.10.17
Проблема с добавлением записи в таблицу. Delphi 2009.


6-1227179897
Decoding
2008-11-20 14:18
2010.10.17
Indy + Cookie