如何使用 VS 安装项目在 32 位或 64 位 Windows 上正确安装“任何 CPU”代码?

问题描述 投票:0回答:3

我们有一大套产品,包括:

  • 用 VB6 编写的桌面应用程序。
  • 用 .NET 编写的桌面应用程序
  • 用 .NET 编写的 Windows 服务
  • 用 .NET 编写的 ASP.NET Web 应用程序
  • 用 .NET 编写的 ASMX 和 WCF 服务

所有 .NET 代码都是用 VS2008 编写的,针对 .NET 3.5 和“任何 CPU”。我们可以针对特定的处理器,但不希望这样做,因为这会导致问题进一步深入到依赖树中。我们还不能将任何东西转移到 .NET 4.0,尽管它稍后会成为一个选项。

所有应用程序共享一些重要的注册表项。我们通过让 .NET 代码始终查看 32 位注册表视图来解决注册表重定向问题。

一些 .NET 代码通过 COM 互操作与 VB6 DLL 对话,但这非常有限,我们可以轻松地删除这种依赖(现在注释掉,稍后在 .NET 中重新编写)。

所有网络应用程序和服务都设计为在 IIS 中托管。需要支持 5.1 之后的所有版本。

我们的构建虚拟机当前运行的是 Windows XP(32 位)。如有必要,我们可以创建新的。

我的任务是确保一切都在 64 位 Windows(所有版本)上正常运行。我目前在使用 .NET 安装项目时遇到问题,所有这些项目都是使用 VS2008 安装项目模板编写的。

即使源代码是Any CPU,安装项目也没有这个功能。您必须将

TargetPlatform
属性设置为一个处理器。这不是很有用。我们不能有一个
setup.exe
在 32 位操作系统上安装为 32 位,在 64 位操作系统上安装为 64 位吗?如果我是安装应用程序的最终用户,我不知道要运行哪个安装程序。

.net-3.5 64-bit setup-project anycpu
3个回答
1
投票

此后我研究了 VS2010 安装项目、WiX 和 InstallShield,它们的行为方式都相同。我将不得不把这个问题写成“不可能”。我打算做:

  • 只需提供单独的 32 位和 64 位安装程序。
  • 编写一个单独的加载程序批处理文件或 exe 来检测位数并运行适当的安装程序。

0
投票

我有一个应用程序决定在运行时加载哪些 DLL,包括 32 位还是 64 位 DLL。我最终与我的老朋友 setup2go 一起完成了这项工作。不管什么不能将 64 位 dll 放入 x86 安装程序,除非将其更改为 x64 但这不是我想要的,它也应该安装在 32 位系统上,64 位 DLL 会占用一些空间但无害.

所以只需谷歌 setup2go,这是可能的,也许只是不使用 MSI。


0
投票

我注意到,对于 VS Installer 项目,您的安装程序可以是 x86,但如果您的应用程序的构建是 AnyCPU,它将像忽略安装程序的目标一样运行。

© www.soinside.com 2019 - 2024. All rights reserved.