Inno Setup:如何获取引发异常的异常代码?

时间:2016-03-21 16:34:45

标签: inno-setup pascalscript

我有以下函数引发异常:

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(GetExceptionMessage, mbError, MB_OK);
  end;
end;

而是在字符串GetExceptionMessage中获取错误,我想以整数形式获取错误。

这可能吗?

1 个答案:

答案 0 :(得分:1)

异常一般没有任何代码。因此,没有通用的方法从异常中检索代码。

在这种特殊情况下,异常基于OLE自动化错误,该错误具有代码。但是,当Inno Setup引发IDispatch接口(OLE)的异常时,代码不会被保留。

您可以做的是使用IUnknown界面。为此你需要:

  • IWinHttpRequest
  • 定义Pascal样式的界面
  • 定义CLSID_WinHttpRequest
  • 使用CreateComObject(而不是CreateOleObject)实例化对象。
  • 调用定义为Send
  • function Send(Body: Variant): HResult方法
  • 检查返回的HResult是否为12038(ERROR_INTERNET_SEC_CERT_CN_INVALID)。

特别是第一步是一项庞大且容易出错的任务。

有关示例和详细信息,请参阅:

如果您决定坚持使用错误消息进行比较,则可以尝试使用FormatMessage function检索要与之比较的系统/本地化错误消息。请参阅How i can retrieve the error description for a WinInet error code from delphi