В настоящее время я пытаюсь создать обработчик исключений, встроенный в мою службу Windows, который при необработанном исключении отправляет сообщение другой программе. Я построил метод и установил работоспособность связи, но кажется, что каждый раз, когда моя программа выдает ошибку (у меня в коде вызывается запрос на повышение), вместо этого Windows перехватывает ее, а обработчик не вызывается. Может кто-нибудь объяснить, что я делаю не так?
Упрощенный код для объяснения:
procedure unhandled();
begin
raise Exception.Create('Unhandled');
end;
procedure ExceptionHandler(ExceptObject: TObject; ExceptAddr: Pointer);
begin
WriteLn('Display: ' + Exception(ExceptObject).Message);
//send Message Here
end;
Я вызываю этот код для запуска:
WriteLn('Starting');
ExceptProc := @ExceptionHandler;
unhandled();
Я ожидаю, что результат будет:
Начиная
Дисплей: необработанный
но все, что он делает, это отображение:
Начиная
Затем через 5 секунд Windows возвращает командную строку.
Почему обработчик не вызывается должным образом?
P.S. Я проводил эти тесты в консольном приложении для тестирования.
EDIT:
Вот еще немного информации:
Очевидно, что когда у вас есть назначенный ExceptProc, ваша программа не должна выдавать обычную ошибку 217 во время выполнения. Я предполагаю, что это то, что ловит окна, однако из того, что я вижу, моя программа выдает эту ошибку во время выполнения, и я не могу заставить ErrorProc перехватить ее.