2010-03-22 51 views
0

我正在處理無法重新編譯的第三方可執行文件(供應商不再可用)。它最初是在.net 1.1下編寫的,但在後來的版本中似乎也能正常工作。我使用Process.Start從我自己的應用程序啓動它(我嘗試過使用p/invoke CreateProcess以及相同的結果,所以這是不相關的)如何消除由第三方應用程序產生的未處理的異常對話框

不幸的是,這第三方應用程序現在拋出一個未處理的異常,因爲它退出。微軟的對話框有一個標題,如「從v2.0拋出的異常...廣播窗口」,其版本號與運行在.Net下的版本相關(我可以使用.exe.config文件來定位不同的.Net版本,並沒有幫助)。

退出時未處理的異常對話框不會導致任何實際問題,但是對於必須單擊「確定」以關閉它的用戶而言很麻煩。有沒有什麼辦法(一個配置文件選項也許)禁用此對話框顯示爲我沒有源代碼的應用程序?我曾考慮將它加載到一個新的AppDomain中,這會讓我訪問UnhandledException事件,但沒有跡象表明我可以改變對話框的出現。也許有人知道是什麼原因導致異常,我可以用其他方式解決這個問題?

回答

2

你可以編寫一個包裝應用程序直接調用第三方應用程序並使用Process.Start啓動你的應用程序。

然後在包裝器應用程序中捕獲異常,以便用戶不會看到錯誤消息。

+0

這是可行的,但您提供的信息太少了:) – 2010-03-23 03:16:53

0

如果它沒有被混淆,你可能可以反編譯它嗎?這當然是非法的,但如果公司實際上已經破產,那麼沒有人會追究。如果您沒有其他選擇,則支持代碼是合理的。

反射器可能會讓你知道代碼崩潰的原因,也許你需要做一些事情或者用參數調用它來阻止代碼崩潰。

0

下一次不要試圖去使用的東西沒有源代碼:)

一種解決方法是跟蹤Chris'的建議。一個包裝應用可以利用這些代碼,

http://blog.jtbworld.com/2007/06/windows-live-writer-spell-checking.html

  1. 查找舊的應用程序的可執行文件。
  2. 在包裝應用程序中創建的AppDomain對象中執行它。
  3. 將應用程序未處理的異常處理程序綁定到此AppDomain對象的UnhandledException事件。

http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx

相關問題