【问题标题】:Create an msi package which installs both 32-bit and 64-bit resources on a machine创建一个在机器上安装 32 位和 64 位资源的 msi 包
【发布时间】:2015-02-13 08:31:44
【问题描述】:

我需要创建一个 MSI 包,它可以在机器上安装基于 firebreath 的插件的 32 位和 64 位 .dll 文件。

我想要实现的是同时安装资源并根据浏览器(32 位或 64 位)使用合适的资源。例如,如果我有一台装有 Windows、Chrome 64 位和 Firefox 32 位的 64 位机器;我希望能够在两个浏览器中使用我的插件。

为此,我使用 Visual Studio 2008 和 Wix。 到目前为止,我能够创建一个 32 位 .dll,它转换为 32 位 .msi 和一个 64 位 .dll,由于 heat.exe,它无法转换为 64 位 .msi漏洞。我得到类似的东西:https://groups.google.com/forum/#!msg/firebreath-dev/HmGYEgZamUQ/35WJWfB4zegJ

前面提到的实现将创建 2 个不同的 .msi 安装程序(如果 64 位 msi 没有失败)。我想要做的是生成两个 .dll 文件(32 位 .dll 和 64 位 .dll),然后将它们打包到一个注册这两个文件的 .msi 安装程序中。

这可能吗?如果可以,最好的方法是什么?

【问题讨论】:

  • Christopher 是对的,最干净的方法是创建两个由引导程序包装的 MSI 包。大多数设置创作工具都可以帮助您做到这一点。

标签: wix windows-installer 32bit-64bit firebreath


【解决方案1】:

Windows 安装程序不支持此功能。严格来说,.MSI 包是特定于平台的。有一些技巧可以创建“混合”安装程序。这需要创建一个 32 位 MSI,以颠覆 MSI 检查以将文件安装到 64 位位置和自定义操作以创建 64 位注册表项。

本书的答案是创建一个 32 位和 64 位 MSI,然后将它们封装在一个引导程序中,该引导程序使用程序和功能注册自身并在幕后安装 2 个 MSI。在 WiX 中,这将使用 Burn 将 2 个安装程序链接在一起来完成。

【讨论】:

  • 是的;基本上你能做的最好的就是构建一个 .exe 安装程序(我们在 NSIS 中),根据平台有条件地安装两者或仅安装 32 位
  • 我不会使用 NSIS 或任何其他您自己编写的东西,因为 WiX Burn 本身就可以理解 MSI 并自动为您处理很多问题。安装、卸载、升级、缓存等。
  • 没用过 WiX 刻录;我可能应该在这些日子里看看它
  • 所以你建议我创建 2 个 msi 文件,一个使用 32 位 dll,一个使用 64 位 dll,然后使用 Burn 并创建一个安装程序,对吗?我不明白这个安装程序是如何工作的,我的意思是当我在 64 位系统上时,普通安装程序会同时安装 32 位和 64 位,这是理想的安装程序功能吗?
  • 是的。 WiX Burn 引导程序将向用户呈现 UI 体验和添加/删除程序条目。 2 个 MSI 将静默安装,并且在添加/删除程序中没有条目。根据您的配置方式,32 位 MSI 可能会或可能不会安装在 64 位机器上,而 64 位 MSI 会。这取决于您需要如何部署解决方案。有时 DLL 是互斥的(如 32/64 驱动程序),有时它们都被安装(如 C++ 运行时)
【解决方案2】:

在这种情况下,我将主要关注 64 位安装程序,而不是创建不同的安装程序并引导它。
以下是我的方法,如果我弄错了,请指出我。

因为 Koka 想要安装程序,它会为浏览器插件设置东西并根据平台使用浏览器。在这种情况下考虑
1> 操作系统是 32 位的,所以没有 64 位浏览器的机会,所以安装 32 位浏览器的设置保持简单。
2> 现在操作系统是 64 位的。机会是 32/64 位浏览器,因此为 32 位和 64 位创建具有不同组件的安装程序,32 位组件将为 32 位浏览器设置东西,与 64 位组件相同。其余的东西留给操作系统作为 32 位浏览器将始终使用 32 位 firebreath 插件。

我相信 Regsvr 将为所有可用的浏览器安装插件,但它在安装程序中被视为 bad practice
这不是一个完整的证明,因为在安装浏览器插件时有很多事情需要开发人员在创建安装程序时注意。

【讨论】:

  • 有没有我可以查看的示例,以便指导如何实施您的提案?
  • 你能分享一些添加浏览器插件的代码吗?像您之前创建的那样创建 64 位安装程序,并添加额外的另一个组件,该组件将执行相同的工作,但适用于 32 位浏览器。我的意思是考虑我需要在 64 位系统上安装驱动程序。在默认情况下使用驱动程序窗口时,根据应用程序位数在 SYSWOW64 或 SYSTEM32 中搜索。所以在安装时我会一次安装 32 位和 64 位驱动程序。(这只需要 64 位)。所以如果你在 64 位安装程序中添加 32 位浏览器文件和 64 位浏览器文件,浏览器将自动根据位数。
  • 即使简单地使用 64 位浏览器插件二进制文件创建 64 位安装程序有时也可能无法正常工作,因为浏览器可能在 64 位操作系统上是 32 位的。codeproject.com/Articles/44191/Drivers-Installation-With-WiX 有一些类似的例子。
猜你喜欢
  • 2011-02-18
  • 2021-05-25
  • 1970-01-01
  • 2012-12-14
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多