2016-03-21 37 views
1

我正在使用具有不可信的TLS(SSL)證書的域,以便我可以調試某些內容。Inno設置異常未捕獲

這是我的代碼:

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子句中的線永遠不會執行,而是我得到以下錯誤:
enter image description here

即使我沒有運行調試器附加可執行它仍然會導致錯誤。

如何處理Inno Setup中的OleObject異常?

回答

1

如你期望的那樣,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本身會捕獲異常並顯示爲「運行時錯誤」。

+0

有什麼辦法可以在證書錯誤的except子句中的狀態代碼? – yuval