更新,2018 年 8 月,一个新的、更短的选项:如何创建 Windows 安装程序。
注重总结MSI and its major benefits
并列出major tools available
(带有下载链接),如
以及mentioning some new, trending deployment technologies
.
我曾从事软件开发工作发布经理, 建造工程师, 设置开发人员并作为应用程序打包器, 国企工程师 and 部署工程师(SCCM) 在大公司。
Along the way, I have used most of the major packaging tools (some in many different versions): InstallShield, Wise (off market, unfortunately), WiX, Advanced Installer (just testing), Orca and I have tested some other tools (link to "Windows Installer Authoring Tools for Developers" from http://www.installsite.org - a rather exhaustive list of tools). I have also used less common packaging and deployment tools such as Computer Associates Unicenter - probably off market by now. There is also a page on Non-MSI Setup Authoring Tools.
UPDATE:如果您发现自己需要 MSI 工具来比较两个 MSI 文件版本,或者只是从 MSI 文件中提取信息,您可能需要阅读以下答案:如何比较两个(或更多)MSI 文件的内容?(专注于免费的 MSI 工具)。
这篇文章概述了一些不同创作工具的优点也一些需要注意的问题。尽管这些工具有很多相似之处,但它们实际上有很大不同。我们已尽一切努力使描述尽可能客观——以积极和消极的方式描述现实世界的经历。
相关部署主题
- 在深入研究不同工具之前,这里有一些其他链接,其中包含有关 MSI 技术本身的信息。
-
以下是部署任务的一般描述部署工具中普遍支持的内容,以及为什么部署似乎变得越来越复杂的描述。
- A lot of people seem to think MSI is more trouble than it is worth, and sometimes that can be understandable. The benefits are real - particularly for corporate deployment, but so are some of the problems.
-
这是我写的关于 MSI 主要企业优势的描述(来自 serverfault.com)。这篇文章已经写得太长了,但希望仍然具有相关性。
- 在我写的同一篇文章中MSI 文件中典型的现实设计缺陷(一项正在进行中的工作 - 只是体验“软件两面”的“内存转储”:开发和部署)。
安装盾
- 功能丰富。
- 始终了解最新技术。
- (Setup) Developer oriented.
- 有不同版本可供选择。
- 旗舰产品 AdminStudio 提供了面向安装开发人员的工具以及面向重新打包人员的工具。
- Very good release management, localization and automation features for build process automation. At least better than the competitors.
- For 复杂的产品发布管理也许是InstallShield 的主要卖点。您可以轻松提供各种风格:语言版本、OEM 版本、查看器、应用程序版本等...使用释放标志和类似的构造。
-
释放标志本质上用于有条件地从每个编译的设置中排除或包含产品的某些部分 - 这通常是制作专业设置系列时所要求的很大一部分。
-
The release view in Installshield allows full overview of all your different setup types and editions. You see all language versions and release setups delivered for the web (one large setup file) or for redistributable media (external source files) and whatever other flavors you have delivered.
- 对于每个版本来说至关重要的是,您可以覆盖重要设置例如产品名称、产品版本、软件包、产品和升级代码以及许多其他必须根据产品版本和语言版本动态更改的必需设置。
- 在许多其他产品中,这种类型的发布和版本管理可能更难实施。对于更简单的设置,这种灵活性可能不太重要。
-
The automation API for the product allows it to be easily "remote controlled" from build automation scripts of various types.
- 还有命令行构建模块(用于专用构建服务器)。
- 使用常规 VBScript / VBA / Javascript 自动化可以轻松实现整套产品和版本构建的完全自动化。
-
Full localization support with string tables used to support different setup languages.
- 基础对话框还提供多种语言的现成版本(需额外付费)。
- 您只需要本地化您自己的设置内容(功能列表标题、任何自定义对话框或消息框、带有文本的图像等...) - 仍然有很多工作。
- 您可以提供庞大的多语言设置。根据我的经验,不建议这样做几个原因(阅读本地化部分)。最糟糕的问题是,您必须先将所有新的和更改的内容本地化为所有语言,然后才能提供英文版本。这对于营销/销售来说几乎是无法接受的。总有一些修复需要您重建并重新发布单一语言,然后您希望在没有所有其他语言的 UAT 和 QA 的情况下执行此操作。最好为每种语言提供单独的构建(易于实现)。
- 良好的社区支持:用户社区论坛.
- 相当不错的 GUI,常见的事情相当简单。
- Full-blown MSI-GUI editor.
- 很强大。有点复杂。
- 底层 MSI 技术的 GUI 功能的限制会导致一些障碍和恼人的限制,但这对于所有部署工具都是相同的。
- 根本原因是 MSI GUI 是使用 MSI 文件本身内的数据表来实现的,与正确的 Win32 对话框的完整“事件模型”相比,这会导致对话框事件的严重限制。
- Full featured C-style scripting language for custom actions called "Installscript".
- Installscript 现在可以编译为本机 - 或用自己的沙箱模拟,不确定是哪一个。有无需安装运行时就像你以前必须做的那样。
- Incidentally this runtime was the source of some rather troublesome deployment problems due to runtime corruption - seemingly often DCOM related - and various incompatibilities between different runtime versions. Here are some troubleshooting links for "legacy purposes":
-
无法安装 InstallShield 脚本运行时.
-
安装程序无法查找或更新 ISScript.msi.
-
Flexera 消费者中心(针对最终用户设置问题)。
- 尽管运行时是一个非常有问题的错误源,但现在所有相关问题似乎都已解决自 Installshield 12 以来已完全解决然后。
-
Nicely integrated help in GUI.
- 对于如此困难的技术来说非常重要。
- 通常非常有帮助 - 特别是对于处理常见任务。
- The 默认二进制文件存储格式不允许真正的源代码控制或分支(与 WiX 不同,WiX 提供开箱即用的功能)。我认为有一种方法可以以文本格式存储项目,但我从未使用过。不确定它会有多有效。
- Without a shadow of a doubt, by far the buggiest of all installation products.
- 公平地说,大多数错误都与特殊的“安装脚本 MSI“为 MSI 设置实现自定义对话框模型的项目类型(而不是被抑制的基于表格的本机 GUI)。
- 换句话说,安装脚本 MSI项目类型MUST NOT在任何情况下都可以使用。如果您仍在使用它们,请牢记这一点 - 它们特别难以正确升级(首次部署可能没问题,但升级会破坏)。其他项目类型似乎运作良好。
- 在放弃 Installscript MSI(大多数人似乎都这样做)之后,该工具对我个人来说效果很好(尽管不是没有错误)。
- I was not对部署的支持感到满意IIS 站点 and COM+应用程序。我需要寻求 WiX 的灵活性和可定制性,而不是 Installshield 的易用性。根本没有足够的灵活性和控制力。
-
Support for Microsoft App-V virtual packages and new virtualization technologies.
- 与普通应用程序相比,允许一些新事物。
- 应用程序流 - 机器上无需本地安装 - JIT。
- 在同一台计算机上使用两个不兼容的软件。
- 通过服务器更新。
- 控制许可 - 最大并发用户数或将软件绑定到组/用户。
- 快速、轻松地向用户展示应用程序。
-
更多微软营销信息请点击这里.
Wise
怀斯正式退役,但之前已经复活过。很遗憾一些法律问题据我所知,这一次可能已经成为最终结果了。对于这样一个伟大的工具来说,这将是一种耻辱。它被 Altiris 收购,然后被赛门铁克收购。现在看来是场外市场。我仍然在总结 Wise 的优秀功能:
- Fast and easy and quite feature rich.
- 总体来说非常易于使用,功能集非常出色。
- 缺乏一些(非常)高级的功能,例如 IIS、高级发布管理等......
- Administrator / Repackager oriented.
- 比 Installshield 更少关注代码。
- 功能独特且灵活的图形脚本编辑器。
- 精心设计的设置配置 GUI。
- 也非常适合小型开发团队正在寻找一种快速且相对简单的方法来部署他们的应用程序。
- 有时稍微落后于最新技术(与 Installshield 相比),但相对“无错误”。
- 直观的 GUI,常见的事情(非常)简单。
- 在脚本样式编辑器中很好地处理安装顺序配置和自定义操作。更多 GUI 脚本,更少编码。
-
坚如磐石,很少有重大错误。
- 帮助资源和社区支持无法与InstallShield相提并论,但仍然不错。
-
我选择的调试和原型设计工具(快速、稳定、易于使用、出色的差异功能)。
- And with regards to the diff features (allowing binary comparison of two MSI files).
- 我尝试过的其他工具在不同 MSI 文件的二进制差异方面都无法与 Wise 相媲美。
- 差异查看器的易用性和清晰度非常出色。
- 对于企业打包来说,这种差异功能可能是工作中非常关键的部分,因为您有数百甚至数千个不同的软件包需要在许多不同的版本中进行管理。
- On a subjective note: my favorite packaging tool. Very reliable.
- 遗憾的是该工具不再可用。
- 我们总是可以希望有一个“轮回”(我在其他一些工具中看到过看起来像 Wise 的 GUI 片段)。
WiX (快速入门技巧)
- The big plus is the text source files. There is no need to store the source as a binary where it is almost impossible to track changes and do proper version control.
- 正确的文本源对于开发团队来说至关重要分枝, 版本控制 and merging。这是一个巨大的飞跃(在我看来,特别是对于大公司的内部开发来说 - 流程复杂,周转很快并且有很多开发人员)。
- 文本源文件的需求和使用是 WiX 工具包创建的核心。这里有一个快速且不完整的“WiX 历史记录”有更多细节。建议阅读以掌握 WiX 的基础和基本原理。
- Some deployment tools that store the installer as binaries could end up in situations where the binary source would exhibit mysterious problems that could never be tracked down properly.
- 这种情况尤其发生在工具更新之后,工具更新也更新了源中的格式(无论出于何种原因)。
- 升级通常会影响数十个表和数百条记录,这使得有效追踪真正的问题变得不可能。
- 症状包括突然出现缓慢的构建、突然缓慢的安装速度、无法解释的编译错误,甚至整个文件损坏等......
- 借助 WiX,您的来源将具有完全的透明度和“精简性”。如果做得正确,它会更干净、更可靠,并且可以自动更新源,但不会导致数十个 MSI 表的级联更改。与源代码控制相结合,更改很容易跟踪和(希望)理解 - 没有添加神秘的、未记录的东西。
- 综上所述,必须注意的是,从 WiX 3 升级到 WiX 4 源文件似乎not是微不足道的。我们希望这是一次性的情况。老实说,我不确定为什么会发生这种情况,而且我没有相关的最新信息。
- 也许可以直接从 Rob Mensching 的博客查看真实新闻:http://robmensching.com/blog/和鲍勃·阿恩森的博客https://www.joyofsetup.com/。互联网使之成为可能——这有时是一个美妙的世界;-)。有传言说他们正在做“海龟一路向下".
-
Rock solid, very few significant bugs.
- 对于那些因其他工具中长期存在的、间歇性的、无法解释的错误而苦苦挣扎的人来说,这是天赐之物。 {战争故事已删除}。
- 更好的是:问题实际上似乎在 WiX 中得到了解决,有时在社区的帮助下 - 这对于开源工具包来说是合适的。大多数时候,核心团队似乎都会处理这个问题。
- Very feature rich, but somewhat hard to use at times.
- 需要时间来适应,即使您已经习惯了,事情也可能会变得“繁琐”(特别是如果您没有正确使用附带的帮助工具)。
- 它有助于使用dark.exe反编译工具将现有 MSI 文件反编译为 WiX XML。这使您无需事先了解太多即可研究 WiX 源。
-
复杂事物的卓越可定制性例如IIS, COM+, SQL服务器, 许可, 防火墙规则, ETC...
“一切”皆有可能,但有时有些复杂。
- WiX 有效”扩展 Windows 安装程序“具有新的和急需的功能。这对于以前必须“推出自己的”解决方案的每个人来说都是一个巨大的好处 - 通常是为了那些看起来微不足道的事情(但仍然很容易出错)。
- 这些扩展的威力怎么强调都不为过。您可以摆脱大量自写的、复杂的自定义操作,转而使用经过测试的解决方案. With 适当的回滚支持! (供应商设置中一个被忽视的功能 - 根据我的经验,几乎所有功能 - 在中止设置后导致不干净的系统状态)。
- 我有编写 C++ dll 的个人经验,其中包含针对常见任务的自定义操作以及适当的回滚支持,并且工作量是惊人的 - 尤其是实际回滚功能的 QA。
- A remarkable lack of GUI tools and very few good samples available - particularly for WiX 4.
- 事情似乎正在好转也许试试这个简短的总结.
- An interesting project might be IsWiX. It is worth checking out.
- WiX教程:https://github.com/iswix-llc/iswix-tutorials
- YouTube 快速演示:https://www.youtube.com/watch?v=nnV_OU6fk8c
-
我在这里已经过时了,如果您获得更多最新信息,请帮助更新.
- Full integration in Visual Studio, with IntelliSense.
- 显然,WiX 4 支持哪些版本的 Visual Studio 会有一些限制。
- 我还没有详细信息,但您需要最新版本的 Visual Studio。我认为 Rob 和 Bob 对此有一些很好的博客文章。
-
免费(!)。每个开发人员都可以构建设置。但必须有人拥有它(!)。真的 ;-)。
- It is Open Source too.
- 社区”:https://github.com/wixtoolset。以及未解决的问题:https://github.com/wixtoolset/issues/issues
- 工具包下载也包含 DTF(部署工具基础)。 .NET 类用于自动处理 MSI 文件的所有内容。看到此处内联示例。非常有用且品质优良。不COM互操作来处理。看这个 serverfault.com 帖子. And 克里斯画家的博客.
-
How do you get started? (direct link to an answer that has been well-received - to my surprise).
- For 基于样本的修补匠 试试这篇代码项目文章快速入门如何使用 WiX (WiX 3) 创建 MSI 文件。这真的很简单(如果你知道 MSI,这是不言而喻的)。
- 您还可以阅读这篇 WiX Stack Overflow 文章了解更多快速入门技巧。
-
新的和推荐的:stackoverflow 答案显示了在 Visual Studio 中创建新的 WiX 项目时编译工作 MSI 文件所需的当前最小更改:WiX 安装程序 msi 未安装使用 Visual Studio 2017 创建的 Winform 应用程序.
- 您可以使用 WiX 的 dark.exe(MSI 反编译器)将现有 MSI 文件反编译为正确的 WiX XML 格式,然后研究它如何组合在一起。非常有用且具有教育意义 - 特别是对于高级功能。
- Current and future versions.
-
3.1版本稳定且已退出(2017 年 5 月发布)。坚如磐石.
-
Version 4 has been eight years in development at this point (August 2017).
- 目前尚不清楚何时可以稳定发布。
- 这显然将是一个非常重大的更新这需要对现有 WiX 文件进行大量修改才能成功使用。
- 目前我无法提供有关主要差异的任何详细信息。
- 毫无疑问,版本3的稳定性和可靠性得到了保留。
高级安装程序
- 我还没有将其用于实际开发。
- 非常容易使用,漂亮的 GUI。
-
UPDATE:
- 极好的集成日志记录在开发测试安装期间工具本身。非常令人印象深刻。
- 也可用于企业重新包装在其“建筑师版".
-
功能丰富。编译各种设置并支持所有新技术(App-X、App-V 等...)
- 支持App-V看起来很广泛。
- Can import许多其他工具的源文件(Installshield、Inno、Wix、Wise、NSIS、Visual Studio、Desktop Bridge 等)。我没有进行广泛的测试。
- 据我所知,以专有文本格式存储项目。
- 看起来很扎实,而且至关重要通过良好的 GUI 隐藏一些 MSI 复杂性显示直观的复选框和选项,而不是 SDK 样式标志和属性。这是一件好事,但目前 WiX 完全缺失了这一点。
- 看起来它可能适合原型设计和测试,非常强大的 GUI 和自动魔法对于常用的功能。
- 我怀念 InstallShield 的发布视图及其发布标志和构建自动化设置以及其他发布管理功能(现在可以改进)。
- 总体而言固体工具看起来最适合寻求简单方法部署应用程序的开发人员。在这方面与怀斯类似。
- 实践经验太少,无法写更多。试试看。
其他工具
-
Orca是免费的 Windows SDK 工具,允许打开、编辑二进制 MSI 文件并进行一定程度的比较。它还允许其他操作,例如生成用于修改 MSI 文件的转换文件和一些其他技术操作。我一直喜欢安装并使用的基本工具。有一个更详细的逆戟鲸段落在这里讨论它的用途(看底部)。您通常必须安装 Windows SDK 才能获得 Orca(只需安装最新版本并搜索该工具)。
- 一个名为“超级虎鲸“已经推荐给我了,一样”InstEd我只简单地使用过它们,但它们看起来不错,而且比 Orca 更容易掌握(无需下载 Windows SDK)。
- 而且还有很多其他工具。这是来自的工具列表http://www.installsite.org并指示该工具是否仍在积极维护:http://www.installsite.org/pages/en/msi/authoring.htm(感谢菲尔·威尔逊对于链接 - 我无法复活他的答案)。
- 我想我还可以添加一个链接维基百科的安装软件列表.
工具推荐?
我不负责直接推荐工具。但我想我可以做一些“观察”并为决策提供一些进一步的链接。
对于任何认真的内部开发团队,我会建议 WiX。其他工具都具有易用性(这一点非常重要,有时甚至是唯一重要的),而 WiX 的优势在于灵活性、可扩展性、稳定性以及对XML 文本源文件- 惩罚是稍微参与处理。由于其免费许可证,每个开发人员都可以查看和编译源代码,并且可以轻松跟踪、恢复或批准更改。不过,与所有更新单个 WiX 源的开发人员一起管理流程仍然面临挑战(与常规开发工作没有什么不同 - 没有什么是容易的)。
For 企业重新包装(诚然,这有点超出了 stackoverflow.com 开发人员的关注范围)我想目前的主要选择是Flexera AdminStudio and 高级安装架构师。还有其他可用产品,并且 installsite.org 一如既往地提供了详细信息:工具:重新打包和企业部署.
For 小型开发团队我想正在寻找一种快速简便的方法来部署他们的应用程序安装盾 and 高级安装程序是最常见的“基于 GUI”的工具。它们提供了很多功能,您将能够快速交付设置。正如已经说过的,有时这是唯一重要的事情。事实上很多时候。但是,可以使用以下方式提供出色的安装程序WiX相反 - 但需要更多的知识。有一个学习曲线,并且存在一些严重的限制 - 特别是目前的 GUI 方面 - 但基础技术非常可靠且免费。而且重要的是有许多其他工具(列表来自http://www.installsite.org)也可能更适合您的任务 - 特别是如果它是一个只需要基本部署功能的简单应用程序。我没有提供有关这些功能相当强大但不太常用或建立的工具的更多信息,这是“不公平的”。
我应该明确表示我推荐 WiX提供内部应用程序的企业团队因为他们可以利用 WiX 提供的灵活性,并且他们还将拥有可用的专业知识和技术技能处理 WiX 的复杂性。他们可以在需要时训练新人。一个非常重要的问题。 WiX 的学习并不简单,除非您已经掌握了大量的 Windows 安装程序知识 - 那么它是小菜一碟,但仍然需要时间,因为它非常灵活,并且缺乏更好的词:“繁琐” - 它就像真实的开发时,您获得了真正的控制权,但需要精确。一旦设置好 WiX 源,处理起来就很困难 - 您知道发生了什么。
总结一下:如果您是小型(或大型)第三方供应商寻找一种将您的应用程序快速交付给客户的好方法使用商业工具可能会更好旨在提供易用性和快速解决方案来实施有限数量的更改。特别是对于 IIS,商业工具过去未能提供我所需的灵活性。内部开发团队至少应该尝试一下 WiX。
Finally a word of caution: Advanced Installer, InstallShield and Wise generally allow packaging of software for virtualization. I am not aware of any features in WiX for this as of now. Please add comments or just edit this post if you have information here.
顶级实用技巧:
我通常使用其他工具原型设计如果我有选择的话,还有 WiX 来实施。您可以使用 WiXdark.exe(MSI 反编译器)反编译现有的 MSI 文件。有时我在 Wise 或 InstallShield 中实现一些东西,编译 MSI 并将其反编译为 WiX 格式。然后我提升 WiX 标记并将其转储到我的主 WiX 文件中。效果很好而且通常非常快。这与heat.exe自动组件创建工具使我能够在经过一些练习后不到 10 分钟就打包了一个巨大的 IIS 网站。之后,我可以享受 WiX 提供的完全可定制性,并且可以轻松使用其他工具。
清理反编译源代码并不是一件容易的事,但它也不是火箭科学。需要一些 MSI 知识,并且您将“摆弄”一段时间。请注意,不建议下载商业工具的试用版来生成和反编译 MSI 文件。生成的 MSI 文件通常带有难以删除的“水印”。
一些链接:
- 如何创建 Windows 安装程序
- 部署工具的候选名单
Older content