2011-08-24 157 views
0

最近3個月我在VS2010中開發Windows 7上的C#應用​​程序。現在它幾乎完成了,我發現它無法在XP上運行。它立即崩潰,並顯示消息「程序遇到問題,需要關閉......」。標準窗口「發送/不發送」錯誤說沒有具體的問題。C#應用程序在XP上崩潰

我可以在這裏發佈代碼,但有幾千行,我不知道哪個部分是重要的,哪些不是。有人可以告訴我「通常的嫌疑犯」會導致這個問題嗎?

感謝 (順便說一句我有Framework 4的兩個我的電腦。我的其他.NET應用程序工作正常。)

[解決方案] 問題是線形我在VS10創建爲GUI的一部分。這些行導致崩潰我不知道爲什麼。事實證明,這不是操作系統問題,類似的問題在W7和Vista上。基本上每臺電腦都沒有VS安裝:)

+4

事件日誌應該有一些簡潔的條目,如果您不想在此處顯示,也可以使用pastebin - http://pastebin.com/。 – kd7

+0

我建議你檢查配置管理器,並嘗試編譯x86-32,而不是x64或「任何CPU」 –

+0

@Safiron:你記錄了應用程序中發生的異常,還有未處理的異常? – Tigran

回答

0

註冊爲Appdomain.UnhandledException事件在您的應用程序中某處的靜態虛擬初始化程序屬性中,在將其重新導入到環境中之前,在您的處理程序中處理/輸出事件。如果這不能幫助它是另一個靜態成員,在你的處理程序訂閱之前被調用的地方,或者「其他地方是錯誤的」。

static bool dummy = RegisterUnhandledExceptionHandler(); 

    private static bool RegisterUnhandledExceptionHandler() 
    { 
     AppDomain.CurrentDomain.UnhandledException += (sender, e) => 
     { 
      Exception ex = (e.ExceptionObject as Exception); 
      // quick dump to file because environment will exit soon 
      File.WriteAllText("unhandled.txt", ex.StackTrace); 
      throw ex; 
     } 
     return true; 
    } 
+0

要試試感謝 – Safiron

0

在你的應用程序的main,處理應用領域異常和應用程序線程異常的代碼,然後診斷它想:

AppDomain.CurrentDomain.UnhandledException += OnCurrentDomain_UnhandledException; 

//in windows forms you need also to add these two lines 
Application.ThreadException += OnApplication_ThreadException; 
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 
0

我打賭你正在使用的P/Invoke或混合模式組件(使用不安全或本地代碼)。

可能存在平臺差異(考慮32/64位的差異,但也缺少/更改的API調用)。

要找到代碼中最有可能的點,我有一個非正統的建議:通過MoMa分析儀link)運行它。

MoMa分析器旨在檢測在跨平臺Mono Framework上運行爲/在MS .NET Framework上開發的應用程序時可能出現的可移植性問題(可在Unix,MAC,Windows甚至iOS和Android平臺上使用) 。

它會給你一個很好的報告可能會導致問題的事情。當然,您可以忽略報告爲「未在單聲道上實現」的項目 - 因爲這不是問題。但是,它會發現P/Invoke的所有有趣用法以及可能會指出您遇到的問題。