未捕获 Inno Setup 异常

Inno Setup Exception is not caught

我正在使用具有不受信任的 TLS (SSL) 证书的域,因此我可以调试一些东西。

这是我的代码:

procedure test();
var
  WinHttpReq: Variant;
begin
  WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
  try
    WinHttpReq.Open('POST', 'https://tv.eurosport.com/', False);
    WinHttpReq.SetRequestHeader('Content-Type', 'application/json');  
    WinHttpReq.Send('');
  except
    MsgBox(IntToStr(WinHttpReq.Status), mbError, MB_OK);
  end;
end;

如果请求出现错误,我想打印 HTTP 状态代码。

问题是 except 子句中的行从未执行,而是出现以下错误:

即使我 运行 没有附加调试器的可执行文件仍然会导致错误。

如何处理 Inno Setup 中的 OleObject 异常?

如您所料,WinHttpReq.Send 抛出

The host name in the certificate is invalid or does not match

该异常被您的 except 块捕获。 except 子句从未执行是不正确的!

except 块中,您尝试读取 WinHttpReq.Status(HTTP 状态代码)。但是还没有 HTTP 状态代码,因为证书验证发生在 任何 HTTP 交换之前。所以第二个异常是由 WinHttpReq.Status getter:

抛出的

WinHttp.WinHttpRequest: The data necessary to complete this operation is not yet available.

而且您没有任何处理程序。所以异常被 Inno Setup 本身捕获并显示为 "Runtime Error".