我的程序的用戶報告無法啓動應用程序。我還沒有解決問題,但我很困惑。無法在.NET 4.0的x64位機上加載資源時發生了什麼?
記錄仍然有效,所以我用日誌報表,並能縮小到崩潰一行在用戶控件的InitializeComponent:
this.HorizontalBox.Image = ((System.Drawing中。圖像)(resources.GetObject( 「HorizontalBox.Image」)));
以下是他的結局相關的線索:
- 64位Windows 7
- 正確的.NET Framework(4.0客戶端配置文件)
- 沒有視覺元素不斷顯現,並沒有錯誤對話框。啓動時無聲關機。
- 登錄工作,但沒有記錄錯誤。
- 他已卸載並重新安裝.NET 4.0客戶端配置文件框架。
- 他沒有任何Visual Studio或其他開發工具。
我花了一個星期左右的時間來消除理論,我變得困惑和絕望。這裏是我發現的相關細節和事情:
- 我明確地針對x86。
- 無法記錄任何異常的日誌記錄設置爲捕獲並記錄任何未處理的異常和線程異常終止。
- 無論是殺死應用程序還會阻止程序基本入口點中的最終「關閉」日誌消息。
- 我讀過某些圖標(.ICO)文件格式在Windows XP中不起作用。這是一個遙不可及的理論,因爲這是Windows 7.這是項目中ICO文件的唯一情況,所以我很懷疑並將其切換到PNG。沒有不同。我自從認爲圖像僅僅因爲它是從資源加載的第一個圖像而失敗。
- 我讀過Form_Load事件可能吞下異常(並且僅在調試時)。此外,InitializeComponent()在構造函數中,所以理論不穩定。儘管如此,我在try/catch中將調用包裝爲InitializeComponent(),但catch和其關聯的日誌記錄永遠不會被調用。
- 我已經在x86和x64之間看到關於資源編譯問題的文章,但是與運行時問題沒有關係。 (請參閱this post)
- 我認爲程序顯示問題時必定存在某些錯誤,因此我僅使用嵌入相關資源文件中的單個映像製作了WindowsFormsApplication1測試應用程序。這也無法以相同的方式加載。該測試應用程序也針對x86。
- 它可以在其他x86和x64機器上正常工作!
他的機器上可能會發生什麼?爲什麼異常處理讓我失望?這個問題很瘋狂!
編輯:更多細節,我仍然感到困惑!
- 我因爲發送構建爲86,64測試應用(單一形式,上面有一個單一的圖像),並且「任何CPU」。 x64和「任何Cpu」應用程序都可以工作。
看起來像某種schroedingbug。難道是窗戶有點搞砸了嗎?因爲如果是這種情況,如果問題來自計算機系統本身,則可能無法調試您的程序。另外,請注意,一些異常是不可捕捉的,如果它們發生,就會使程序崩潰。 – squelos 2012-03-07 21:46:34
前段時間我有類似的問題。我的應用程序使用基於Win7的ICO文件,突然在XP上崩潰。我用PNG取代了ICO文件,一切進展順利。系統事件日誌說什麼?你能遠程登錄到機器嗎?你可以使用WinDBG/SOS進行調試,看看到底發生了什麼。如果您無法遠程調試它,請讓您的用戶爲您運行該軟件並創建一個完整的轉儲文件,這也可以提供幫助。 – GETah 2012-03-07 22:30:09
如果你能在機器上可靠地發生這種情況,你唯一的度假村可能會使用windbg。這是一個非常陡峭的學習曲線,但是一旦你掌握了一些基本知識,在調試這樣的事情時非常方便。 – 2012-03-12 14:02:05