2012-11-21 83 views
0

如果我的VB.NET程序所需的某些DLL丟失,當我運行它時,它崩潰與典型的Windows錯誤消息,並沒有提供任何關於錯誤的信息。防止應用程序崩潰而不提供信息,當DLL丟失

所以,我想在做任何事情之前驗證所有的依賴關係是滿足的。但這不是微不足道的,因爲我有非託管和運行時依賴關係。因此,在深入研究之前,是否有一些CLR設置,或針對此問題的一些更簡單的解決方案?

+0

如果你不知道你有什麼運行時依賴關係,那麼你總是可以從SysInternals的ProcMon實用程序中找到它。你會看到你的程序搜索DLL。 –

+0

是的。但是我也有用/ clr開關構建的C++/CLI程序集,它引用了非託管C++程序集。不知道該怎麼做。我的意思是,我知道哪個程序集引用了哪個,這個東西正在以通用方式驗證它們的存在,而沒有對整個依賴樹進行硬編碼。 –

+0

對,這就是ProcMon會告訴你的。在不到2分鐘的時間內做到這一點是不可能的,你必須嘗試。沒人能猜到你會看到什麼。如果您想要更好的建議,請向您使用的DLL的所有者尋求幫助。他們總是有可用的部署說明。 –

回答

0

這真的很簡單(避免Windows的樣板消息,就是這樣)。你只需要讓你的應用程序處理UnhandledException事件。

對於一個VB.NET應用程序窗口像我的窗體,這意味着去項目屬性,Application選項卡並單擊View Application events按鈕。

打開了(隱藏默認情況下)ApplicationEvents.vb文件。我添加了一些代碼:

Namespace My 

    ' The following events are available for MyApplication: 
    ' 
    ' Startup: Raised when the application starts, before the startup form is created. 
    ' Shutdown: Raised after all application forms are closed. This event is not raised if the application terminates abnormally. 
    ' UnhandledException: Raised if the application encounters an unhandled exception. 
    ' StartupNextInstance: Raised when launching a single-instance application and the application is already active. 
    ' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected. 
    Partial Friend Class MyApplication 

     Private Sub MyApplication_UnhandledException(ByVal sender As Object, _ 
                ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs _ 
                ) Handles Me.UnhandledException 
      MessageBox.Show("Application crashed due to the following unhandled exception. " + e.Exception.ToString()) 
     End Sub 

    End Class  

End Namespace 

現在,如果我錯過了一些DLL,我得到它的名字,如果它的管理或混合,在異常消息。如果缺少的DLL不受管理,我只能得到需要它的混合程序集的名稱。但是這對我來說很好,將混合程序集放在Depends.exe上很快就會顯示違規的非託管程序集。

相關問題