我目前正在尝试创建一个内置到我的 Windows 服务中的异常处理程序,当出现未处理的异常时,它会向另一个程序发送消息。我已经构建了该方法并使通信正常工作,但似乎每次我的程序抛出错误时,(我在代码中有一个 raise 调用来强制它。)windows 会捕获它而不调用 Handler。谁能解释我做错了什么?
简化代码解释:
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();
我希望输出是:
起始
显示:未处理
但它所做的只是显示:
开始
然后 Windows 在大约 5 秒后返回命令提示符。
为什么没有正确调用处理程序?
PS 我一直在控制台应用程序中运行这些测试以进行测试。
编辑:
这里有一些更多信息:
显然,当您有一个分配的 exceptProc 时,您的程序不应该抛出正常的运行时 217 错误。我猜这就是windows正在捕获的东西,但是据我所见,我的程序正在抛出运行时错误,我也无法让ErrorProc来捕获它。