前幾天推出的Skype MSN群組工具,一些網友回報在XP環境無法執行,一執行程式便立刻以當掉(Crash)收場。由於網友回報多半只有"開不起來"、"當掉"等描述,一直蒐集不到錯誤細節,想解決也苦無頭緒。直到FB群組裡一位熱心網友,李大華同學,提供珍貴的當機畫面擷圖,另一位MVP Alex Lee則更進一步在手邊找到可以重現錯誤的XP SP3機器,錯誤資訊漸豐,總算有些眉目。

一開始被訊息中的clr20r3誤導,由於程式為.NET 4.0,錯誤卻由.NET 2.0的Runtime爆出來,直覺一直咬定跟.NET 4.0 Framework安裝有關,但經重裝.NET 4.0問題卻不見任何改善。瞎抓一陣子,才把焦點移到錯誤訊息中的另一條線索: System.IO.FileFormatException!

爬文找到一則高度相關案例,同樣是WPF程式,在XP SP2、Vista、Windows 7上執行都沒問題,獨獨在XP SP3一啟動就Crash,而錯誤來源也是System.IO.FileFormatException,跟我們遇到情境極為相似! 而同則討論中提到了ICON與PNG、JPG的問題,我想起專案中使用的ICON來自VS2010 Image Library的WinVista群組。

用Visual Studio 2012開啟ICO檔(沒想到Visual Studio連ICON檔都能直接編輯,不愧是地表上最強悍的開發工具),果然在其中發現了幾個大尺寸的PNG。

將PNG逐一移除,重Build程式再送請Alex測試,當機問題藥到病除~

推測這起當機疑雲跟ICON中內含PNG格式圖檔有關,但有趣的是,參考案例的程式在XP SP2正常,只有在XP SP3才出錯,而我們的案例中,程式使用.NET 4.0,但回報錯誤的來源卻是clr20r3,則是另一個謎。念在XP即將步上IE6後塵,快將被眾人放逐火星,茶包隱情已不值得用力追究。

唯獨得到一次寶貴經驗:

若程式在其他平台執行順利,唯獨在XP上一啟動就當機,請優先檢查是否源起ICON內含PNG?

再次感謝李大華及Alex Lee協助破案~


Comments

# by Raylo

該xp是否ie6?

# by player

PNG解碼應該是 GDI+ 做的吧? 有試過 WinXP 裝了 SP3 之後 再去更新 GDI+ 嗎?

# by Alex Lee

To Raylo: IE部份是IE 8 To player: 如果你指的是http://support.microsoft.com/kb/2659262, 已經有安裝此更新

# by Franma

黑大,除了可以編輯外,若是將 圖檔放到版控中的話,VS 2012 還可以提供圖檔的「差異比對」~~~ 很神!

# by Michae Li

This is quite helpful to me. Thanks a lot, dude.

# by eric huang

此問題應是 icon 尺寸超過 64x64 造成 Windows XP 執行程式錯誤, 連 catch 都捉不到. 請參考: http://www.vbforums.com/showthread.php?643899-RESOLVED-Dreaded-clr20r3-System-InvalidOperationException-on-program-start-ONLY-on-Windows-XP

Post a comment