【问题标题】:How do I create a Prerequisite Package for Windows Installer?如何为 Windows Installer 创建必备软件包?
【发布时间】:2019-07-31 22:09:20
【问题描述】:

谁能给我一个关于创建可在 WiX 中使用的必备软件包的很好的介绍?这些和“引导程序包”是一样的吗?

这适用于基于 .NET Framework 4.7.1 构建的 C# Windows 桌面应用程序(实际上是 ASCOM driver)。

【问题讨论】:

  • 你在分发什么?什么类型的运行时或组件?
  • @SteinÅsmul 好问题。 “这将适用于基于 .NET Framework 4.7.1 构建的 Windows 应用程序。”。问题已更新。
  • 您熟悉"Burn" - 作为 WiX 工具包一部分的 setup.exe 引导程序创建者吗? (链接显示“hello burn”示例)。它将不同类型的软件包捆绑在一起,例如 EXE、MSI、MSP 等...只是想先检查一下。
  • 今晚我的时间不多了,所以请原谅链接吊,但是here is a piece on driver deployment
  • 最后,我敢于链接到我的实验网站(永远不会完成):installdude.com。如果需要,可以搜索更多。这是一个“部署跳闸”(是的,这是一个笑话 ;-) - “带我去见你的领导”)。请在实际搜索框中输入自动完成的匹配项。

标签: wix windows-installer prerequisites


【解决方案1】:

单独的 MSI:我更喜欢通过单独的 MSI 部署先决条件,然后将其全部捆绑到一个 Burn-bundle setup.exe 或来自Advanced InstallerInstallshield(套件项目)的等效结构。我喜欢这个,因为我可以在不触及主 MSI 的情况下更新先决条件。

Merge Module:Windows Installer 中旨在部署许多应用程序共享的先决条件或组件的内置机制是合并模块。 Merge modules 是在编译时合并到主 MSI 数据库中的片段数据库(某种静态链接)。使用这些模块可以以正确的方式对所有文件进行引用计数,从而可以确定是否可以在卸载时卸载文件,或者是否有其他应用程序仍在使用运行时/必备组件。记录一下:使用 MSI,卸载必备 MSI 会使所有依赖它的应用程序立即失败。我觉得这没问题,特别是对于您可能想要的企业部署(例如轻松降级到以前的必备版本)。


WiX 包含文件:合并模块有一个 WiX 替代方案。以下是描述它们的两个答案 - 基本上就像您可以包含到许多源文件中的 C++ 包含文件:

基本结构

<?include include.wxi ?>

我会使用auto-component GUIDs


个人意见:我不喜欢合并模块,因为它们被合并到很多包中,突然你必须重新构建它们以进行新的合并模块更新?内聚和耦合不好? (这里没有共识)。请注意,由于 Windows Installer 的设计,安装一个具有更新的先决条件的软件包就足以为所有使用合并模块安装的应用程序更新系统。为什么?因为新包——如果合并模块被正确编写——应该升级所有共享文件。对于没有安装许多使用相同合并模块的其他应用程序的系统,您仍然需要更新所有安装程序以获取新的合并模块版本。所以你也一样吗?


COM:每个人都喜欢的传统技术:COM。对于进程外 COM 文件(EXE 文件),我假设您需要注册 AppId 以及 Class guidProgIds强>。为类和 progids 使用适当的表,我相信应该尝试 AppId 表。一些设置需要进入注册表。

商业工具为 COM 提供了很多自动魔法,但不幸的是,WiX 存在一些挑战。以下是关于 COM 注册表数据提取的杂乱无章的内容:Registering COM EXE with WIX。我想这需要一些时间。

WiX 工具包中的 heat.exe 工具可以提取 dll 文件的 COM 信息,但不能从 EXE 文件和 64 位组件中提取。 The commercial branch of WiX, Firegiant has a tool that does it all.


链接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2011-11-02
    • 1970-01-01
    • 2011-06-28
    • 2014-04-05
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    相关资源
    最近更新 更多