2014-11-23 167 views
2

如果uninstall.vsf文件在此代碼中調用LoadVCLStyle_UnInstall函數時不存在,我該如何忽略msgbox的錯誤?忽略錯誤處理的錯誤信息?

我假設使用嘗試塊用空除了將足以在其他語言,但事實並非如此。

// Import the LoadVCLStyle function from VclStylesInno.DLL 
procedure LoadVCLStyle_UnInstall(VClStyleFile: String); external '[email protected]{app}\uninstall.dll stdcall uninstallonly'; 

//E: Occurs when the uninstaller initializes. 
function InitializeUninstall: Boolean; 
begin 

    Result := True; 

    // Initialize the VCL skin style. 
    try 
    LoadVCLStyle_UnInstall(ExpandConstant('{app}\uninstall.vsf')); 
    except 
    finally 
    end; 

end; 

enter image description here

+1

你所看到的並不是一個例外,而是一個消息框['由'顯示](https://code.google.com/p/vcl-styles-plugins/source/browse/trunk/InnoSetup%20plugin/ VclStylesInno.dpr#61)當引發異常時插件。這種情況下,您可以通過在嘗試加載皮膚之前檢查是否存在'FileExists'來解決這個問題;與其他任何異常,你都很不幸。 DLLs不能引發任何異常,但是當它們遇到一些IMHO時不應該顯示任何對話框。像GetLastError這樣的系統在那裏會更好。 – TLama 2014-11-23 11:08:15

回答

0

檢查事先已經提到的文件存在的可能性。

用戶TLama提到問題中的代碼不是普通的pascal程序代碼,而是Inno Setup腳本代碼,而且我的答案不適用於這種情況。因爲下面的文本可能對pascal程序員有用,所以我們保留它。

EXCEPT聲明本身並不處理異常,它只標記發生錯誤後應繼續執行程序的點。當EXCEPT ... END塊中的異常未被處理/捕獲時,它將被轉移到更高的EXCEPT聲明中。 (Freepacal參考指南第17章)

我也不認爲TRY ... EXCEPT ... FINALLY ... END會工作。 EXCEPTFINALLY,不是兩者。

如果你想捕捉你必須做一些這樣的例外:如果此錯誤的異常類未在文檔中定義

TRY 
    LoadVCLStyle_UnInstall(ExpandConstant('{app}\uninstall.vsf')); 
EXCEPT 
    On EWhateverException DO ...; 
END; 

,您可以使用下面的技巧,以找到異常類名稱:

TRY 
    LoadVCLStyle_UnInstall(ExpandConstant('{app}\uninstall.vsf')); 
EXCEPT 
    ON Exception DO WriteLn(ExceptObject.ClassName); 
END; 

隨着ON Exception DO ..你可以捕捉任何異常,但我不建議對使用該變種的明確計劃。

+1

這是錯誤的。您可能正在考慮像'onE:ExceptionClass do'這樣的構造,其中'E'是將獲得異常對象的變量,它將在'except'塊中得到。那麼,這些都不會在Inno Setup Pascal Script中起作用。此外,這不會解決該插件的問題(它只是顯示消息框;它不是在設置中引發的異常)。 – TLama 2014-11-23 15:20:15

+0

@TLama - 那麼爲什麼是TRY ... EXCEPT支持? – Kitana 2014-11-23 15:23:15

+2

事實上,不支持異常類和'on'結構並不意味着擁有'try..except'塊是沒有意義的。您不必過濾「except」塊中的某些異常類(這是可選的)。最後,OP腳本中的異常處理與問題中顯示的消息框無關。對這個問題的回答是,當插件中引發異常時,該插件會顯示消息框;沒有'try..except'塊會阻止它被顯示。它在該插件中被硬編碼。 – TLama 2014-11-23 15:31:33