在 Vista / Win7 的電腦都能正常運行,唯獨 XP 電腦無法執行
已經確認正常安裝,只是在執行後(點兩下)就直接關閉
初步懷疑是 XP 的版本並沒有在 SP3 以上
經確認後,版本是正確的
接著懷疑是 XP 並沒有正確安裝 .NET 4.0
後來懷疑是 Microsoft.VisualBasic.PowerPacks 未安裝
也是
似乎不是底層有缺損的問題,這時候就需要應用程式為何會起始失敗的資訊了
參考網路上前輩的範例 [C#]顯示未處理的例外錯誤
確實在程式起始的期間,有發生例外 :
於 System.RuntimeMethodHandle._SerializationInvoke(IRuntimeMethodInfo method, Object target, SignatureStruct& declaringTypeSig, SerializationInfo info, StreamingContext context) 於 System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(Object obj, SerializationInfo info, StreamingContext context) 於 System.Runtime.Serialization.ObjectManager.FixupSpecialObject(ObjectHolder holder) 於 System.Runtime.Serialization.ObjectManager.DoFixups() 於 System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) 於 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) 於 System.Resources.ResourceReader.DeserializeObject(Int32 typeIndex) 於 System.Resources.ResourceReader._LoadObjectV2(Int32 pos, ResourceTypeCode& typeCode) 於 System.Resources.ResourceReader.LoadObjectV2(Int32 pos, ResourceTypeCode& typeCode) 於 System.Resources.ResourceReader.LoadObject(Int32 pos, ResourceTypeCode& typeCode) 於 System.Resources.RuntimeResourceSet.GetObject(String key, Boolean ignoreCase, Boolean isString) 於 System.Resources.RuntimeResourceSet.GetObject(String key, Boolean ignoreCase) 於 System.Resources.ResourceManager.GetObject(String name, CultureInfo culture, Boolean wrapUnmanagedMemStream) 於 System.Resources.ResourceManager.GetObject(String name) 於 Form1.Form1.InitializeComponent() ...(以下略)
很明顯地,這是因為 準備讀入某項資源 的時候發生了無法處裡的例外造成的 ...
初步懷疑是內建預設的 properties 讀取失敗
不過這個 project 剛好沒有使用到資源,所以排除此問題
那剩下的有啥資源會是初始化的時候要讀取進來的呢?
猛然瞄到有個 .ico 檔案躺在專案底下,詢問之後,發現這是 使用者自訂圖示
原本認為是檔案損毀,結果外部檢查的結果檔案是正常的
正在查看中不經意地發現,圖示檔案大小居然是 256 x 256 (大型圖示)
印象中這在 XP 時代是沒有的東西,有可能不支援
BOOM! 茶包消滅! 原來真的是因為圖示無法初始化導致應用程式啟動失敗 orz
如果你的視窗應用程式必須要發佈給XP的使用者,請不要使用超過 32 x 32 的圖示檔案!!
微軟我真是猜不透你呀XD
===
這問題實在是太噁心了,特此撰文留念
沒有留言:
張貼留言