2015-12-27 229 views
0

VB.NET Winforms程序,.NET 4.0,與VS2013一起編譯。 100%託管代碼;沒有依賴於某個處理器架構的DLL。在64位系統上檢測32位程序的安裝

我有兩個Visual Studio安裝程序項目,一個用於x86,另一個用於x64。

該程序「手機之家」找到一個新的程序;現在我檢測到處理器體系結構以確定是否存在新程序以下載32位或64位安裝程序。

檢測代碼:

dim sArchitecture as String = "" 
    If Environment.Is64BitProcess Then 
     sArchitecture = "x64" 
    Else 
     sArchitecture = "x86" 
    End If 

問題場景:

客戶有64位的機器,但下載32位安裝程序,這當然正常工作。事實上,我們建議不知道處理器架構的客戶下載32位安裝程序。

32位安裝程序將手機置於家中併發送它在程序中檢測到的x64處理器體系結構。下載帶來了64位安裝程序,該安裝程序將秒的副本安裝到客戶的計算機中,隨後出現混淆。

我需要弄清楚,如果我使用Visual Studio安裝程序項目,將TargetPlatform設置爲x86,是否有一些可靠的方法來檢測此問題?檢查安裝文件夾以查看它是否包含「Program Files(x86)」不足;客戶可能已將程序安裝到其他位置。

我真的很感謝幫助!

謝謝 約翰。

回答

1

切換到發佈版本並右鍵單擊您的EXE項目>屬性>生成選項卡。您將Platform目標設置爲AnyCPU,並關閉首選32位複選框。

是的,.NET程序可以自動運行在32位和64位模式,非常方便。你不需要爲32位和64位版本單獨構建,很好。除此之外,您的「檢測代碼」不再可靠地工作,32位安裝程序仍然部署以64位模式運行的程序。只有在不留下面包屑的情況下才能發現所使用的安裝程序的唯一方法是從安裝目錄對其進行反向工程。是的,不是很可靠。在註冊表中保留麪包屑很容易,安裝人員擅長編寫註冊表項。

但只是簡化你的生活,你根本不需要一個64位特定的安裝程序。一個人完成工作。它存儲在「錯誤」目錄中並不重要,你已經知道它工作正常。

+0

謝謝。一個發人深省的答案。我會選擇一個解決方案並回報。 –

+0

我走了麪包屑路線。它運作良好。謝謝! –

相關問題