接獲報案,某隻.NET程式在本機測試正常,同一個EXE檔搬到特定幾台機器,一執行就出現"is not a valid win32 application"(中文版為"不是有效的 Win32 應用程式")。

問題機器為32位元Windows 2003,上面已經有多個.NET寫的排程程式運行中,檢查Windows\Microsoft.NET\Frameworks目錄,v1.0到v4.0.*資料夾都在,判斷已裝到.NET Framework 4.0,而另外寫一個簡單.NET 4 Console Applicatione測試程式丟上問題機器可正常執行。原本一度懷疑問題主機中毒,放上的exe被篡改導致檔案毁損(訣竅:這年頭不管出了什麼事,讓駭客出來揹黑鍋就對了 XD),.NET 4測試程式執行成功已大致排除中毒疑慮。(駭客:看!你有問題關我屁事?)

好奇用Notepad++開啟問題程式及測試程式的exe二進位檔,想粗略檢查MZ表頭結構是否異常,意外發現問題程式exe檔末端出現Framework,Version=v4.5字樣。追問程式來源,確認這個專案被編譯成.NET 4.5!

原先沒料想該程式用到.NET 4.5,知道Windows 2003不支援.NET 4.5,也知道x86/x64版本不合時會冒出不是有效Win32應用程式錯誤,但.NET 4.5程式在Windows 2003平台出現此一訊息倒在意料外!將先前成功執行的.NET 4測試程式換成.NET 4.5,刻意編譯成x86平台,放到Windows 2003執行可重現相同錯誤,驗證「在Windows 2003主機上執行.NET 4.5程式會出現"不是有效的Win32應用程式"錯誤」。

筆記之。


Comments

Be the first to post a comment

Post a comment


34 + 8 =