![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Критическая ошибка при выполнении групповой политики
И. Павел © (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 мин.