2012-03-02 58 views
1

我使用Windows XP 32位開發機器維護最初構建於Visual Studio 2005 Framework 2.0中的應用程序。將開發環境更改爲64位Windows 7 - 應用程序崩潰

我的新開發機器是Windows 7 64位。

我將我的解決方案加載到Visual Studio 2010中,併成功轉換了所有項目(有幾個實際應用程序使用),並更新到Framework 4.0。

在調試模式下,應用程序運行時沒有問題。

現在,這樣做的方式是,只有一個安裝程序曾部署。更改部署到服務器。當應用程序在安裝後運行時,它實際上運行更新程序應用程序以檢查文件對服務器的更改,如果找到任何文件,則會下載它們,替換客戶端上的原始文件,然後「真實」應用程序跑。

將在我的64位機器上編譯的第一個版本部署到服務器後,我運行已安裝的應用程序版本以測試它是否正常工作。更新似乎工作正常,但是當它啓動「真實」的應用程序,它崩潰。在Windows 7

運行,它與崩潰:

錯誤的應用程序名稱:ProviderDesktop.exe,版本:2.6.0.0,時間戳:0x4f4fad5e 錯誤模塊名稱:KERNELBASE.dll,版本:6.1.7600.16850,時間戳:0x4e211485 異常代碼:0xe0434352 故障偏移:0x0000b9bc 出錯進程ID:0x2388 錯誤的應用程序的開始時間:0x01ccf8971407b4fe 錯誤的應用程序路徑:C:\程序文件(x86)\ UHINt2.5 \ ProviderDesktop.exe 斷裂作用模塊路徑:C:\ Windows \ syswow64 \ KERNELBASE.dll 報告Id:53717437-64

事件類型:clr20r3 P1:providerdesktop.exe P2:2.6.1.1
P3:4f4fad5e P4:providerdesktop P5:2.6.1.1 P6在XP 8A-11e1的-a455-8a2e36aa00e8

運行,它崩潰:4f4fad5e
P7:85d P8:0 P9:system.io.fileloadexception

我在Google搜索問題後至今執行了2次診斷。

首先,我嘗試了Fusion日誌記錄。沒有被發現。

其次,我嘗試了DependencyWalker,在Windows 7開發機器上加載有問題的應用程序。它顯示缺少IESHIMS.DLL。參考this後,我找到了IESHIMS.DLL,但在DependencyWalker中發現它實際上期望該DLL位於應用程序的根文件夾中。我把它放在那裏,重新運行了DependencyWalker,那個錯誤消失了。但是,我強烈懷疑還有另一個錯誤是問題的根本原因:錯誤:找到具有不同CPU類型的模塊。

DependencyWalker中列出的每個模塊都是x64,除了ieshims.dll和我的實際.exe是x86。 Updater和Real應用都針對x86平臺。

有些同事之前曾經提出過,由於真實應用中的第三方引用,我可能會遇到問題。從我在這裏可以看到的情況來看,情況似乎並非如此。

如果有人能幫我解決這個問題,我一定會很感激,因爲我對x86/x64等底層概念並沒有太多的瞭解。這意味着在2010/.NET 4.0中快速開發一臺不錯的機器,並且爲了這個應用程序需要保留一個XP/32的虛擬機,這個應用程序有嚴重的性能問題,並且在2005/.NET 2.0中開發。

我的目標是能夠在Win7x64,2010,4.0上開發應用程序,並讓updater更新客戶端版本的應用程序而沒有問題。

非常感謝提前。

回答

0

我從來沒有試過混用明確針對32位和64位的程序集。

您是否嘗試將所有目標更改爲任何CPU?

0

如果不包含不安全的代碼,.Net可以在64位機器上完美工作。大部分時間不安全的代碼需要更正才能在本機64位模式下工作。

但是,您可以讓您的應用程序在WOW(Windows on Windows)模式下工作,在這種情況下,您的應用程序將在32位計算機上工作。它在項目屬性中啓用,將平臺目標設置爲x86而不是任何CPU。

相關問題