Показать сообщение отдельно
  #10  
Старый 27.01.2015, 12:20
Аватар для madMonia
madMonia madMonia вне форума
Новичок
 
Регистрация: 25.02.2014
Сообщения: 50
Версия Delphi: Delphi XE3
Репутация: 2545
По умолчанию

В случае с RenameFile нужно обрабать результат функции

Код:
if not RenameFile('ddraw.dll','wdraw.dll') then
begin
  ShowMessage('Произошла ошибка при переименовании файла' + IntToStr(GetLastError));
  exit;
end;

Работа с реестром зависит от версии Delphi. В DelphiXE начиная со 2й есть свойства LastError, LastErrorMsg, которые позволяют проверить, что за ошибка произошла. А до этого не помню, может быть никак нельзя было проверить.

Другими словами код как-то так выглядит
Код:
if not   Registry.OpenKey('Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers', True) then
begin
  ShowMessage('Не удалось открыть раздел реестра' + IntToStr(Registry.GetLastError));
  exit;
end;

Методы WriteString и DeleteValue выбрасывают эксепшионы
Код:
try
  if AddDel = True then Registry.WriteString(ExtractFilePath(ParamStr(0))+'Revenant.exe', Param);
  if AddDel = False then Registry.DeleteValue(ExtractFilePath(ParamStr(0))+'Revenant.exe');
except 
  on E: ERegistryException do
  begin
     ShowMessage('При изменении реестра произошла ошибка:' +e.message);
     exit;
  end;
end;

Ваше опасение, что какая-то из операций начнет выполнятся до того, как предыдущая завершит выполнение, безпочвенно. Операции выполняются строго последовательно.
__________________
Невозможно заточить карандаш тупым топором. Столь же тщетно пытаться сделать это десятком тупых топоров
Ответить с цитированием