VB.NET Winforms Program,.NET 4.0,使用VS2013编译。 100%托管代码;没有依赖于某种处理器架构的DLL。
我有两个Visual Studio Installer项目,一个用于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)”是不够的;客户可能已将程序安装到另一个位置。
我真的很感谢帮助!
由于 约翰。
答案 0 :(得分:1)
切换到发布版本并右键单击您的EXE项目>属性>构建标签。您将平台目标设置为AnyCPU,并关闭首选项32位复选框。
是的,非常方便.NET程序可以在32位和64位模式下自动运行。您不需要为32位和64位版本单独构建,这很好。除了你的"检测代码" 32位安装程序仍然无法正常运行,它仍然部署了一个以64位模式运行的程序。如果没有留下面包屑,发现使用哪种安装程序的唯一方法是从安装目录对其进行反向工程。是的,不太可靠。将面包屑留在注册表中是非常容易的,安装人员擅长编写注册表项。
但是,只是简化您的生活,您根本不需要64位特定的安装程序。一个人完成了工作。它存储在"错误的"目录并不重要,你已经知道它工作正常。