2018 年 8 月更新,一个新的更短的选项:How to create windows installer。
重点总结MSI and its major benefits并列出major tools available(附下载链接),如
以及 mentioning some new, trending deployment technologies。
我曾在软件开发领域担任过发布经理、构建工程师、设置开发人员和应用程序打包人员 strong>、SOE 工程师 和 部署工程师 (SCCM)。
在此过程中,我使用了大多数主要的打包工具(一些有许多不同的版本):InstallShield、Wise (不幸的是,非市场)、WiX、Advanced Installer(只是测试)、Orca 我已经测试了some other tools(链接到“面向开发人员的Windows Installer 创作工具" 来自http://www.installsite.org - 一个相当详尽的工具列表)。我还使用了不太常见的打包和部署工具,例如 Computer Associates Unicenter——现在可能已经不在市场上。 Non-MSI Setup Authoring Tools上还有一个页面。
更新:如果您发现自己需要 MSI 工具来比较两个 MSI 文件版本,或者只是从 MSI 文件中提取信息,您可能需要阅读以下答案:How can I compare the content of two (or more) MSI files? (专注于免费的 MSI 工具)。
这篇文章概述了一些不同创作工具的优点以及需要注意的一些问题。尽管它们有很多相似之处,但这些工具实际上是完全不同的。我们已尽一切努力使描述尽可能客观 - 用正面和负面的方式描述现实世界的经历。
相关部署主题
- 功能丰富。
- 始终采用最新技术。
- (设置)面向开发人员。
- 提供不同的版本。
- 旗舰产品 AdminStudio 提供面向设置开发人员的工具和面向重新打包人员的工具。
- 非常好的发布管理、本地化和自动化功能,用于构建过程自动化。至少比竞争对手好。
- 对于复杂产品,发布管理可能是 InstallShield 的主要卖点。您可以使用发布标志和类似的结构轻松交付各种风格:语言版本、oem 版本、查看器、应用程序版本等。
-
发布标志主要用于有条件地从每个编译设置中排除或包含产品的某些部分 - 这通常是制作专业设置系列时要求的大部分内容。
-
The release view in Installshield 允许您全面了解所有不同的设置类型和版本。您会看到所有语言版本和发布设置,用于网络(一个大型设置文件)或可再分发媒体(外部源文件)以及您提供的任何其他风格。
- 对于每个发行版和版本至关重要的是,您可以覆盖重要设置,例如产品名称、产品版本、软件包、产品和升级代码以及许多其他必须根据需要动态更改的设置产品版本和语言版本。
- 在许多其他产品中,这种发布和版本管理可能更难实施。对于更简单的设置,这种类型的灵活性可能不太重要。
-
产品的自动化 API 允许通过各种类型的构建自动化脚本轻松“远程控制”。
- 还有命令行构建模块(用于专用构建服务器)。
- 使用常规的 VBScript/VBA/Javascript 自动化可以轻松实现整套产品和版本构建的完全自动化。
-
完全本地化支持,带有用于支持不同设置语言的字符串表。
- 还以多种语言提供现成的基本对话框(需额外付费)。
- 您只需要本地化您自己的设置内容(功能列表标题、任何自定义对话框或消息框、带有文本的图像等...) - 仍然需要大量工作。
- 您可以提供庞大的多语言设置。根据我对several reasons 的经验,不建议这样做(阅读本地化部分)。最糟糕的问题是,您必须先将所有新的和更改的内容本地化为所有语言,然后才能交付英文版本。这对于营销/销售来说几乎是不可接受的。并且总是存在需要您重建和重新发布一种语言的修复程序,然后您希望在没有 UAT 和所有其他语言的 QA 的情况下这样做。最好为每种语言提供单独的构建(易于实现)。
- 良好的社区支持:User Community Forums。
- 相当不错的 GUI,普通的东西相当容易。
- 成熟的 MSI-GUI 编辑器。
- 非常强大。有点复杂。
- 基础 MSI 技术的 GUI 功能的限制会导致一些障碍和烦人的限制,但这对于所有部署工具都是一样的。
- 根本原因是 MSI GUI 是使用 MSI 文件本身内的数据表实现的,与正确 Win32 对话框的完整“事件模型”相比,这会导致对话框事件受到严重限制。
- 用于自定义操作的全功能 C 样式脚本语言,称为“Installscript”。
- Installscript 现在可以编译为本机 - 或使用自己的沙箱进行模拟,不确定是哪个。 无需像以前那样安装运行时。
- 顺便说一下,这个运行时是一些相当麻烦的部署问题的根源,原因是运行时损坏 - 似乎通常与 DCOM 相关 - 以及之间的各种不兼容不同的运行时版本。以下是一些用于“遗留目的”的故障排除链接:
- 尽管运行时是一个非常有问题的错误来源,但现在所有相关问题似乎都自 Installshield 12 及更高版本以来已完全解决。
-
在 GUI 中很好地集成了帮助。
- 对于如此高难度的技术来说非常重要。
- 通常非常有帮助 - 尤其是在处理常见任务时。
-
默认二进制文件存储格式不允许真正的源代码控制或分支(与开箱即用的 WiX 不同)。我认为有一种方法可以以文本格式存储项目,但我从未使用过它。不确定效果如何。
- 毫无疑问,它是迄今为止所有安装产品中错误最多的。
- 公平地说,大多数错误都与特殊的“Installscript MSI”项目类型有关,该项目类型为 MSI 设置实现了自定义对话框模型(而不是被抑制的基于表的原生 GUI)。
- 换句话说,Installscript MSI 项目类型不得在任何情况下都可以使用。如果您仍在使用它们,请牢记这一点 - 它们特别难以正确升级(第一次部署可能没问题,但升级会中断)。其他项目类型似乎运作良好。
- 在放弃 Installscript MSI(大多数人似乎都这样做)后,该工具对我个人来说运行良好(虽然不是没有错误)。
- 我对 IIS 站点 和 COM+ 应用程序 的部署支持不满意。我需要的是 WiX 的灵活性和可定制性,而不是 Installshield 的易用性。根本没有足够的灵活性和控制力。
-
支持Microsoft App-V virtual packages 和新的虚拟化技术。
- 与普通应用程序相比,允许一些新功能。
- 应用程序流式传输 - 机器上没有本地安装 - JIT。
- 在同一台计算机上使用两个不兼容的软件。
- 通过服务器更新。
- 控制许可 - 最大同时用户数或将软件绑定到组/用户。
- 快速轻松地向用户展示应用程序。
-
More Microsoft marketing here。
明智
Wise 正式退役,但之前已经复活了。不幸的是,some legal issues 这次可能已经进入决赛了——据我所知。对于这么棒的工具来说,这将是一种耻辱。它被 Altiris 收购,然后被赛门铁克收购。现在似乎是off market。我仍然在总结 Wise 的优点:
- 快速简单且功能丰富。
- 总体上非常易于使用,功能集出色。
- 缺少一些(非常)高级功能,例如 IIS、高级发布管理等...
- 面向管理员/重新打包者。
- 比 Installshield 更少关注代码。
- 功能独特且灵活的图形脚本编辑器。
- 精心设计的设置配置 GUI。
- 也非常适合小型开发团队寻找一种快速且相对简单的方法来部署他们的应用程序。
- 有时会稍微落后于最新技术(与 Installshield 相比),但相对“没有错误”。
- 直观的 GUI,普通的东西(非常)简单。
- 在脚本样式编辑器中非常好地处理安装顺序配置和自定义操作。更多的 GUI 脚本,更少的编码。
-
坚如磐石,很少有重大错误。
- 帮助资源和社区支持不如 InstallShield,但仍然很好。
-
我选择的调试和原型设计工具(快速、稳定、易于使用、出色的差异功能)。
- 关于差异功能(允许对两个 MSI 文件进行二进制比较)。
- 对于不同 MSI 文件的二进制差异,我尝试过的任何其他工具都无法接近 Wise。
- 差异查看器的易用性和清晰度同样出色。
- 对于企业打包而言,此类差异功能可能是工作中非常关键的部分,因为您需要在许多不同版本中管理数百甚至数千个不同的软件包。
-
主观评价:我最喜欢的打包工具。非常可靠。
- 该工具不再可用真是太遗憾了。
- 我们总能期待“轮回”(我在其他一些工具中看到过类似于 Wise 的 GUI sn-ps)。
- 最大的优点是文本源文件。无需将源代码存储为二进制文件,这样几乎不可能跟踪更改并进行适当的版本控制。
- 在分支、版本控制和合并方面,正确的文本源对开发团队而言至关重要。这是一个巨大的飞跃(在我看来,特别是对于大型公司的内部开发 - 流程复杂、周转迅速且开发人员众多)。
- 对文本源文件的需求和使用是创建 WiX 工具包的核心。这是quick and incomplete "WiX history" 的详细信息。推荐阅读以了解 WiX 的基础和基本原理。
- 某些将安装程序存储为二进制文件的部署工具最终可能会出现二进制源出现无法正确追踪的神秘问题的情况。
- 这尤其发生在工具更新之后,该工具更新了源中的格式(无论出于何种原因)。
- 升级通常会影响数十个表和数百条记录,因此无法有效地追踪真正的问题。
- 症状包括突然出现的缓慢构建、突然缓慢的安装速度、无法解释的编译错误,甚至完全文件损坏等...
- 使用 WiX,您可以完全透明并“精简”您的来源。如果正确完成并且可以自动更新源,它会更清洁和更可靠,但不会导致通过数十个 MSI 表进行级联更改。结合源代码控制更改很容易跟踪和(希望)理解 - 没有添加神秘的、未记录的内容。
- 综上所述,必须注意的是,从 WiX 3 升级到 WiX 4 源文件似乎并非是微不足道的。让我们希望这是一次性的情况。老实说,我不确定为什么会发生这种情况,而且我没有关于它的最新信息。
- 也许可以直接从 Rob Mensching 的博客 http://robmensching.com/blog/ 和 Bob Arnson 的博客 https://www.joyofsetup.com/ 中查看真实新闻。互联网使之成为可能,直接从马的嘴里说出来——这有时是一个美妙的世界;-)。有传言说他们在做“turtles all the way down”。
-
坚如磐石,极少数重大错误。
- 对于那些在其他工具中长期存在、间歇性、无法解释的错误而苦苦挣扎的人来说,这是天赐之物。 {战争故事已移除}。
- 甚至更好:问题实际上似乎在 WiX 中得到了解决,有时需要社区帮助 - 这对于开源工具包来说是合适的。不过,大多数时候,核心团队似乎都在处理它。
- 非常功能丰富,但有时有点难以使用。
- 需要一些时间来适应,即使您已经习惯了,也可能会“很麻烦”地适应(特别是如果您没有正确使用随附的帮助工具)。
- 它有助于使用 dark.exe 反编译器工具 将现有的 MSI 文件反编译为 WiX XML。这让您无需事先了解太多就可以研究 WiX 源代码。
-
复杂事物的出色可定制性,例如IIS、COM+、SQL Server、权限、防火墙规则等...
“一切”都是可能的,但有时会有些牵涉。
- WiX 有效地“扩展了 Windows Installer”,具有新的和急需的功能。对于以前必须“推出自己的”解决方案的每个人来说,这都是一个巨大的好处——通常是针对看似微不足道的事情(但仍然很容易出错)。
- 这些扩展的力量怎么强调都不为过。您可以摆脱大量自行编写的复杂自定义操作,转而使用经过测试的解决方案。 适当的回滚支持! (供应商设置中一个被忽视的功能 - 根据我的经验,几乎所有这些功能 - 在中止设置后导致系统状态不干净)。
- 我有编写 C++ dll 的个人经验,该 dll 具有针对具有适当回滚支持的常见任务的自定义操作,而且工作量惊人 - 尤其是实际回滚功能的 QA。
- 明显缺乏 GUI 工具,而且可用的示例很少 - 特别是对于 WiX 4。
- 在 Visual Studio 中与 IntelliSense 完全集成。
- 显然,WiX 4 将支持哪些版本的 Visual Studio 会有一些限制。
- 我还没有详细信息,但您需要最新版本的 Visual Studio。我认为 Rob 和 Bob 关于这方面的博客文章不错。
-
它是免费的 (!)。每个开发人员都可以构建设置。必须有人拥有它(!)。真的;-)。
- 也是Open Source。
-
How do you get started?(直接链接到广受好评的答案 - 令我惊讶)。
- 当前和未来版本。
-
版本 3.1 稳定且已发布(2017 年 5 月发布)。 坚如磐石。
-
第 4 版 已经开发了八年(2017 年 8 月)。
- 尚不清楚何时可以稳定发布。
- 这显然是一个非常重大的更新,需要对现有 WiX 文件进行大量修改才能成功使用。
- 目前我无法详细说明主要区别是什么。
- 毫无疑问,版本 3 的稳定性和可靠性得到了保留。
- 我没有将它用于真正的开发。
- 非常易于使用,界面美观。
-
更新:
- 在开发测试安装过程中,工具本身的集成日志记录非常好。非常令人印象深刻。
- 在其“Architect 版本”中也可用于企业重新包装。
-
功能丰富。编译各种设置并支持所有新技术(App-X、App-V 等...)
- 对 App-V 的支持似乎非常广泛。
- 可以导入许多其他工具的源文件(Installshield、Inno、Wix、Wise、NSIS、Visual Studio、Desktop Bridge 等...)。未经我广泛测试。
- 据我所知,以专有文本格式存储项目。
- 看起来很可靠,关键是通过良好的 GUI 隐藏了一些 MSI 复杂性,显示直观的复选框和选项,而不是 SDK 样式的标志和属性。这是一件好事,目前 WiX 完全没有这样做。
- 看起来它可能适用于原型设计和测试,非常强大的 GUI 和 自动 用于常用功能。
- 我想念 InstallShield 的 Release 视图及其发布标志和构建自动化设置以及其他发布管理功能(现在可以改进)。
- 总体而言,这是一个可靠的工具,看起来最适合寻求一种简单方法来部署其应用程序的开发人员。在这方面与 Wise 类似。
- 实践经验太少,不能多写。试试看。
其他工具
工具推荐?
我不适合直接推荐工具。但我想我可以做一些“观察”并提供一些进一步的决策链接。
对于任何认真的内部开发团队,我建议使用 WiX。 在其他工具易于使用(这非常重要,有时是唯一重要的事情)的地方,WiX 擅长于灵活性、可扩展性、稳定性和 XML 文本源文件 的使用 - 有点涉及处理的惩罚。由于其免费许可证,每个开发人员都可以查看和编译源代码,并且可以轻松跟踪、恢复或批准更改。管理一个由开发人员更新单个 WiX 源的流程仍然存在挑战(与常规开发工作没有什么不同 - 没有什么是容易的)。
对于企业重新打包(诚然,这超出了 stackoverflow.com 的开发人员重点)我猜目前的主要选项是 Flexera AdminStudio 和 高级安装架构师。还有其他产品可用,并且一如既往地 installsite.org 有详细信息:Tools: Repackaging & Corporate Deployment。
对于小型开发团队寻找一种快速简便的方法来部署他们的应用程序,我猜Installshield和高级安装程序是最常见的“基于 GUI”的工具。它们提供了许多功能,您将能够快速提供设置。如前所述,有时这是唯一重要的事情。事实上很多时候。但是,可以使用 WiX 来提供出色的安装程序 - 但需要更多的知识。有一个学习曲线,并且有一些严重的限制 - 特别是目前的 GUI - 但基础技术非常可靠和免费。重要的是,还有 many other tools(来自http://www.installsite.org 的列表)可能更适合您的任务 - 特别是如果它是一个只需要基本部署功能的简单应用程序。我没有提供有关这些功能强大但不太常用或不成熟的工具的更多信息是“不公平的”。
我应该明确表示,我向提供内部应用程序的公司团队推荐 WiX,因为他们可以使用 WiX 提供的灵活性,并且他们还将拥有可用的专业知识和技术技能 来处理 WiX 的复杂性。他们可以在需要时培训新人。一个非常重要的问题。除非您已经具备大量 Windows Installer 知识,否则学习 WiX 并不是一件容易的事——那么它就是小菜一碟,但仍然需要时间,因为它非常灵活并且没有更好的词:“fiddly”——它就像真的开发,你得到了真正的控制,但需要精确。一旦设置了 WiX 源,就可以梦想处理 - 你知道发生了什么。
总结一下:如果您是一家小型(或大型)第三方供应商,正在寻找一种将您的应用程序快速交付给客户的好方法您可能最好使用商业广告工具旨在提供易用性和快速解决方案来实施有限数量的更改。特别是对于 IIS,商业工具无法提供我过去所需的灵活性。内部开发团队至少应该尝试一下 WiX。
最后提醒一句:Advanced Installer、InstallShield 和 Wise 通常允许将软件打包用于 虚拟化。到目前为止,我不知道 WiX 中有任何功能。如果您在此处有信息,请添加 cmets 或仅编辑此帖子。
实用技巧:
如果可以选择,我通常会使用其他工具进行 原型设计 和 WiX 来实现。您可以使用 WiX 的 dark.exe(MSI 反编译器)来反编译现有的 MSI 文件。有时我在 Wise 或 InstallShield 中实现某些东西,编译 MSI 并将其反编译为 WiX 格式。然后我解除 WiX 标记并将其转储到我的主 WiX 文件中。效果很好,通常非常快。这与用于自动创建组件的 heat.exe 工具相结合,使我能够在经过一些练习后在不到 10 分钟的时间内打包一个巨大的 IIS 网站。之后,我拥有了 WiX 提供的完全可定制性,以及其他工具的易用性。
清理反编译的源代码不是野餐,但也不是火箭科学。需要一些 MSI 知识,您将“摆弄”一段时间。请注意,不建议下载商业工具的试用版来生成和反编译 MSI 文件。生成的 MSI 文件通常带有难以删除的“水印”。
一些链接: