安装程序:WIX或Inno安装程序?

我正在比较这两个工具。 我的印象是:

  • Inno Setup不会产生MSI,但可以完成WIX所能做的一切
  • WIX确实产生了一个MSI,但有一个陡峭的学习曲线

你是否同意这种表征? 还有什么其他的区别? WIX#如何改变这个故事? 由于Inno安装程序不使用Windows安装程序,是否有卸载的困难? Can Inno Setup可以根据命令将安装降级到早期版本 – 或者只能安装/升级应用程序?

我和MSI工作了很长一段时间,当我转向InnoSetup时,我从不回头。

我不希望我的安装是一个头痛的问题。 我需要一些可以“设定并忘记它”的东西

InnoSetup默认生成一个卸载。 它可以处理简单或复杂的安装和卸载需求。

使用InnoSetup您可以通过几种不同的方式升级应用程序。

  • 最初我们使用覆盖方法,只是覆盖了现有的安装。
  • 最近,我们在安装新版本时切换了以前版本的自动卸载。

随着InnoSetup降级通常是卸载并重新安装旧版本。

你对MSI不是MSI部分是正确的,你说得对,MSI的学习曲线是陡峭的。 但是两者都有别人不具备的特点。 让我引用Glytzhkof关于MSI的优势。

Glytzhkof说嗨;-) 。 请在serverfault.com上阅读我的原始答案,以获取由于其陡峭的学习曲线导致的MSI常见问题的摘要。 这个答案重点在理论上的好处, 另一个答案 (在同一个线程中)总结了常见的MSI问题。 最值得欢迎的是我添加了最常见的问题。

  • 透明度 (开放式安装程序格式) – 可以查看和检查MSI。 这对于大公司来说是一个巨大的问题 。 除编译的自定义操作外,MSI文件是一个“白盒”。 如果安装程序改变了一些疯狂的东西,比如系统的networking设置,你可以真正的看到它。
  • 可定制性 – 可以通过转换来定制MSI以适应组织的需求和标准,同时仍允许与供应商的安装程序更新的互操作性。 您不会更改安装程序本身,您可以在名为“转换”的单独的组织特定文件中创build自定义。 您可以自由地禁用自定义操作以及安装程序中的任何操作,“黑匣子”自定义操作可以通过联系供应商进行解释。 这些转换文件有时也用于将MSI文件本地化为不同的语言。 多个转换可以应用于单个MSI。
  • 标准化 – 微星不适合“允许任何事情”。 它为安装程序提供了一个全面的框架,其中最关键的还包括卸载 – 全部采用标准格式。 安装程序GUI还标准化为内置function,以支持可以远程触发的无提示安装和卸载。
  • pipe理和报告 – Windows Installer维护产品已安装的所有项目的综合数据库。 您可以可靠地确定是否安装了产品,安装了哪些function以及安装了哪些文件版本。 此外,您可以获得已应用于基本产品的所有修补程序的列表(如果有的话)。
  • 安全性 – 从全面的安装数据库可以检测安装的产品中的安全漏洞。 MSI还包含“提升权利”原则,允许受限用户触发安装需要pipe理员权限的产品。 这是“广告function”的一部分,它允许pipe理员将安装程序提供给用户,而无需在所有工作站上实际安装。 没有必要混淆临时权利来使事情正常工作。
  • validation – 可以使用validation规则检查MSI文件,以确保其符合许多内部一致性规则(称为ICE)。 公司可以创build自己的ICE检查来执行特殊的公司规则和要求。 这对QA有很大的帮助。
  • 弹性 – Windows安装程序的pipe理员安装function提供了从MSI中提取源文件的标准方法。 这些源文件然后可以放在共享上,并可供所有工作站安装。 这可以确保修复,卸载和修改操作,而无需在CD或类似软件上请求安装介质。 这对于在特殊情况下可能需要访问旧版本源文件的修补和更新操作尤为重要。
  • 回滚 – 安装MSI文件通常会触发创build还原点。 此外,在安装过程中replace或覆盖的所有文件和registry项都将保存并在安装无法完成时恢复。 这确保即使安装失败,工作站仍保持稳定状态。 正如你可能期望devise不佳的MSI文件可能会违反Windows的内置function,请参阅我的其他post以获取更多详细信息。
  • 修补和更新 – 尽pipeWindows安装程序中的高度复杂的修补程序在系统上完全pipe理和注册,因此可以通过检查已安装的内容来确定系统安全状态。 更新被标准化为几个基本的变体,这允许以更高的确定性执行更新。 部署系统将能够报告哪些更新失败以及为什么。
  • 日志logging –Windows安装程序提供了一个标准化的日志loggingfunction,它比以前的版本更加优越,但是过于冗长。 可以使用日志分析器将日志文件解密,并且可以使用自定义日志级别来消除用不必要的信息生成太大的日志文件。 为了debugging目的,详细logging是非常有用的。 请参阅Rob Mensching的博客,了解如何阅读MSI日志文件。

我迟到了回应这个线程。 多年来,我一直在为我公司的产品使用Inno Setup。 它做得非常好,但对我来说最大的障碍是自定义操作。 在Inno Setup中,必须使用Pascal语言的变体。 使用WiX工具集,我可以并且确实使用C#来执行对我来说更加舒适的自定义操作。 无可否认,这是个人偏好,但这是我从一个优秀的Inno Setup平台转换到一个优秀的WiX平台的主要原因。 那么,以及在另一个回应中已经提到的使用MSI有太多的好处。

坦率地说,对我来说,Pascal的学习曲线比使用本书“ WiX 3.6:Windows Installer XML开发人员指南”的WiX的学习曲线要​​高。

我们将这两者整合到我们的构build系统

但是,我们决定只为了一个简单的原因,仅仅为了非商业用户和msi来推销innosetup exe文件。

您不能使用MSI发布安装程序的多本地化版本。 你将需要一个安装程序为每种语言,这很糟糕。 可能会有一些严重的黑客攻击,让你重写整个graphics用户界面,但这是没有很好的文件,没有开源的盗窃和大量的工作。

GUI在WiX上实际上是最糟糕的部分,否则在技术上比Innosetup更好。

有了Innosetup,使用5种语言发送一个exe文件非常简单。 我们已经有6个二进制文件[免费,家庭,专业 – 每个32/64位],所以变种爆炸将是巨大的,如果你有日本的网页销售日本版本,第一件事情是一个只有英语的安装它是不好的印象。

对于需要组策略等的商业用户来说,MSI只是英文版,这对于商业用户来说是很好的select。