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

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

Критическая ошибка при выполнении групповой политики


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

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

Моя программа выполняется групповой политикой при загрузке компьютера. При этом где-то в функции “LoadReg” (приведена ниже) она вылетает видимо с критической ошибкой (т.е. не проваливается в except, а просто вылетает). Если запустить потом LoadReg под администратором после авторизации – все выполняется нормально.

На некоторых машинах все отрабатывается, а на некоторых происходит такой вылет.  Раньше были проблемы с реестром, а что теперь я даже и не знаю.
Подскажите, пожалуйста, в чем моя ошибка и как это можно исправить?

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

PS: вот код функции LoadReg (она восстанавливает значение “Mail” реестра) и еще три ветки. Видимо, вылетает до (или во время) CloseFile(RegF), т.к. ничего в лог записать не успевает. Метод SetPr включает/выключает привилегии. Весь код программы я разместил здесь: http://paste.org.ru/?hjc9ua

procedure TMainForm.LoadReg(TempDir: string);
var r: TRegistry;
   RegF: TextFile;
   KeyValue: string;
begin
 r := TRegistry.Create;
 try
   try
     r.LazyWrite := false;
     r.RootKey := HKEY_LOCAL_MACHINE;

     AssignFile(RegF, TempDir + 'mail.dat');
     Reset(RegF);
     if not r.OpenKey('\SOFTWARE\Clients\Mail', false) then
       WriteLog('Не удалось открыть раздел реестра "HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail".');
     Readln(RegF, KeyValue);
     r.WriteString('', KeyValue);
     r.CloseKey;
     CloseFile(RegF);
     
//Ошибка,идимо, происходит в коде выше, т.к. в лог следующая строчка не пишется (а другие строки в лог заносятся).

WriteToLogFile('Восстановлено значение элемента <по умолчанию> раздела "HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail"', false, now, DriveStr + '\YITTemp\OfficeInstall\log.log');

     SetPr('SeRestorePrivilege', true);

     if not r.DeleteKey('\SOFTWARE\Classes\mailto') then
       WriteLog('Не удалось удалить раздел реестра "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\mailto".');
     if not r.CreateKey('\SOFTWARE\Classes\mailto') then
       WriteLog('Не удалось создать раздел реестра "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\mailto".');
     if not r.RestoreKey('\SOFTWARE\Classes\mailto', TempDir + 'mailto.dat') then
       WriteLog('Не удалось восстановить раздел реестра "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\mailto".');
     WriteToLogFile('Восстановлен раздел "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\mailto".', false, now, DriveStr + '\YITTemp\OfficeInstall\log.log');

     if not r.DeleteKey('\SOFTWARE\Classes\.tif') then
       WriteLog('Не удалось удалить раздел реестра "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.tif".');
     if not r.CreateKey('\SOFTWARE\Classes\.tif') then
       WriteLog('Не удалось создать раздел реестра "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.tif".');
     if not r.RestoreKey('\SOFTWARE\Classes\.tif', TempDir + 'tif.dat') then
       WriteLog('Не удалось восстановить раздел реестра "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.tif".');
     WriteToLogFile('Восстановлен раздел "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.tif".', false, now, DriveStr + '\YITTemp\OfficeInstall\log.log');

     if not r.DeleteKey('\SOFTWARE\Classes\.tiff') then
       WriteLog('Не удалось удалить раздел реестра "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.tiff".');
     if not r.CreateKey('\SOFTWARE\Classes\.tiff') then
       WriteLog('Не удалось создать раздел реестра "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.tiff".');
     if not r.RestoreKey('SOFTWARE\Classes\.tiff', TempDir + 'tiff.dat') then
       WriteLog('Не удалось восстановить раздел реестра "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.tiff".');
     WriteToLogFile('Восстановлен раздел "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.tiff".', false, now, DriveStr + '\YITTemp\OfficeInstall\log.log');

     SetPr('SeRestorePrivilege', false);
   finally
     r.Free;
   end;
 except
   on e: Exception do
     WriteLog('При записи данных в реестр возникла ошибка. ' + e.Message, false);
 end;  
end;


И. Павел   (2010-07-30 09:53:00) [1]

Оказывается, выполнение моей программы прерывалось системой из за того, что происходил таймаут: на выполнение скриптов отводилось 10 мин.


Наверх

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