代码之家  ›  专栏  ›  技术社区  ›  Christian Hayter

如何使用vs安装项目在32位或64位Windows上正确安装“any cpu”代码?

  •  1
  • Christian Hayter  · 技术社区  · 14 年前

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

    • 用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)。

    所有Web应用程序和服务都设计为在IIS中承载。5.1以后的所有版本都需要支持。

    我们的构建虚拟机当前正在运行Windows XP(32位)。如果必要的话,我们可以创造新的。

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

    即使源代码是任何CPU,安装项目也没有这个特性。你必须设置 TargetPlatform 属性到一个处理器。这不是很有用。我们不能要一个吗 setup.exe 在32位O/S上安装为32位,在64位O/S上安装为64位?如果我是安装应用程序的最终用户,我不知道要运行哪个安装程序。

    2 回复  |  直到 12 年前
        1
  •  1
  •   Christian Hayter    14 年前

    从那以后,我研究了VS2010安装项目、WIX和InstallShield,它们的行为都是一样的。我要把这个问题写下来,说成“不可能”。我打算这样做:

    • 只需提供单独的32位和64位安装程序。
    • 编写一个单独的加载程序批处理文件或exe来检测位并运行相应的安装程序。
        2
  •  0
  •   colin lamarre    12 年前

    我有一个应用程序可以决定在运行时加载什么dll,包括32位或64位dll。最后我和我的老朋友SETUP2GO一起完成了这个任务。无论什么不能得到64位DLL到x86安装程序,除非把它改为x64,但这不是我想要的,它也应该安装在32位系统上,在那里64位DLL将占用一点空间,但没有损害。

    所以,只要谷歌设置2Go,这是可能的,也许只是没有微星。