【问题标题】:32 bit shim and 64 bit shim in Windows InstallerWindows Installer 中的 32 位 shim 和 64 位 shim
【发布时间】:2016-05-15 22:42:26
【问题描述】:

我有一个 VS2010 项目,它分别创建一个 32 位 Shim 和一个 64 位 Shim。这是一个在 .NET 中开发的 Outlook 加载项(因此是 shiming)。

随着不久前 x64 在 Outlook 中的出现(从 2010 年开始),我们一直在不断地制作 x86 Windows Installer 文件和 x64 Windows Installer 文件。

我面临的真正问题是,当用户下载 MSI 文件时,他们中的许多人不知道 他们的 Outlook 是多少位。很多时候,他们安装了不正确的 MSI 版本,并且无法加载到他们的 Outlook 中。

Com Addins 对话框中报告了标准 COM 错误(未加载...运行时错误等)。

我想避免创建和部署 2 个单独的 MSI 文件...是否有可能以某种方式拥有一个通用安装程序?用户只需下载单个 MSI,软件就会安装/注册到相应的Program Files(x86)/Program Files

这可能吗?

我研究过 WiX 和 InstallShield,但还不太热衷于使用它们。是否可以使用 VS2010 中内置的 Windows Installer 来实现我想要实现的目标?

【问题讨论】:

    标签: visual-studio-2010 windows-installer outlook-addin shim


    【解决方案1】:

    您可以创建单个 MSI 安装程序 - 它可以是 WiX、Windows 安装程序或其他任何东西。您只需添加一个自定义操作,您可以在其中检测 Outlook 位数并在机器上注册正确的加载程序。请参阅Windows Installer Setup With Custom Actions 了解更多信息。

    【讨论】:

    • 你会在这里谈论什么装载机?如果我发现 Outlook 的位数正确,我不能只启动静默 MSI 安装吗?
    【解决方案2】:

    您仍然需要两个单独的 MSI 文件。见:

    https://blogs.msdn.microsoft.com/heaths/2008/01/15/different-packages-are-required-for-different-processor-architectures/

    https://msdn.microsoft.com/en-us/library/windows/desktop/aa367451(v=vs.85).aspx

    尤其是它说 32 位软件包需要包含 32 位组件的地方。

    问题是您的下载器/安装程序需要在下载之前检测系统上 Outlook 的位数。

    您可以为 Outlook 加载项创建 32 位和 64 位合并模块,并将 32 位合并模块包含在 32 位包中,并将 32 位和 64 位合并模块包含在您的 64 位设置,以便它注册两个位。如果用户从 32 位 Outlook 迁移到 64 位,他们不需要重新安装您的产品。

    64 位 MSI 无法安装在 32 位系统上,因此出现的错误一定是在 64 位 Outlook 系统上安装 32 位 MSI。如果 64 位 Outlook 的检测机制可以作为启动条件包含在 32 位 MSI 中,则可以防止该错误。

    【讨论】:

    • 您能否详细说明“合并模块”
    • 在 VS 中只需创建一个合并模块项目,安装程序项目类型之一,添加文件并构建 MSM。然后您可以将其添加到您的 MSI 设置项目中。
    猜你喜欢
    • 2012-10-26
    • 2011-09-02
    • 1970-01-01
    • 2013-03-12
    • 2012-10-20
    • 2019-01-07
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多