安装人员:WIX或Inno设置?

Bre*_*ias 46 windows installer inno-setup wix

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

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

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

Rob*_*ove 44

自从我与MSI合作已经很长时间了,当我切换到InnoSetup时,我从未回头.

我不希望我的装置很头疼.我需要一些能够"设置并忘记它"的东西

默认情况下,InnoSetup会生成卸载.它可以处理简单或复杂的安装和卸载需求.

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

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

使用InnoSetup降级通常是卸载并重新安装旧版本.

  • 如果您将软件交付给消费者,InnoSetup是一种选择.如果您的软件交付给企业,我只会使用MSI.这就是我忽略InnoSetup并使用MSI的原因.我很久以前就为MSI付了学习曲线.:) (16认同)
  • 仅供参考 - 即使微软也在使用InnoSetup进行Visual Studio Code. (3认同)
  • 我们的软件是内部和企业. (2认同)
  • @Rob Mensching:我很好奇,为什么你只为企业使用MSI? (2认同)
  • @ 8DH,M​​SI更加团队政策友好.也就是说,您可以轻松地使用组策略部署MSI,EXE更加繁琐. (2认同)

Lar*_*ens 34

你对MSI而不是MSI部分是正确的,你是对的,MSI的学习曲线更陡峭.但两者都有其他人没有的功能.让我引用Glytzhkof关于MSI的优点.

Glytzhkof说嗨;-).请在serverfault.com上阅读我的原始答案,以了解MSI因其陡峭的学习曲线而导致的常见问题.这里的答案侧重于理论上的好处,另一个答案(在同一个主题中)总结了我头脑中常见的MSI问题.最受欢迎的是 - 我刚刚添加了最常见的问题.

  • 透明度(打开安装程序格式) - 可以查看和检查MSI.这对大公司来说是个大问题.除编译的自定义操作外,MSI文件是"白盒子".如果设置改变了一些疯狂的东西,例如系统范围的网络设置,你实际上可以看到它.
  • 可定制性 - MSI可以通过转换进行定制,以满足组织的需求和标准,同时仍允许与供应商的安装程序更新进行互操作.您不会更改安装程序本身,而是在名为transform的单独的组织特定文件中创建自定义.您可以自由禁用自定义操作以及安装程序中的任何内容,并且可以通过与供应商联系以获取解释来批准"黑匣子"自定义操作.这些转换文件有时也用于将MSI文件本地化为不同的语言.几个变换可以应用于单个MSI.
  • 标准化 - MSI不适合"允许任何东西".它为安装程序提供了一个全面的框架,其中还包括卸载 - 所有这些都是标准格式.安装程序GUI还标准化,具有内置功能,可支持可远程触发的静默安装和卸载.
  • 管理和报告 - Windows Installer维护产品已安装的所有项目的综合数据库.您可以可靠地确定是否已安装产品,安装了哪些功能以及安装了哪些文件版本.此外,您还可以获取已应用于基础产品的任何修补程序列表(如果有).
  • 安全性 - 从全面的安装数据库中可以检测已安装产品中的安全漏洞.MSI还包含 "提升权限"原则,允许受限用户触发安装需要管理员权限才能安装的产品.这是"广告功能"的一部分,它允许管理员向用户提供安装程序,而无需在所有工作站上实际安装它们.没有必要将临时权利弄得乱七八糟.
  • 验证 - 可以使用验证规则检查MSI文件,以确保它符合许多内部一致性规则(称为ICE).公司可以创建自己的ICE检查来强制执行特殊的公司规则和要求.这有助于QA.
  • 弹性 - Windows安装程序的管理员安装功能提供了从MSI中提取源文件的标准方法.然后,可以将这些源文件放在共享上,并供所有工作站使用以进行安装.这可确保完成修复,卸载和修改操作,而无需在CD或类似设备上请求安装介质.这对于修补和更新操作尤为重要,这些操作可能需要在特殊情况下访问旧版本的源文件.
  • 回滚 - 安装MSI文件通常会触发创建还原点.此外,如果安装无法完成,则将保存并恢复安装期间替换或覆盖的所有文件和注册表项.即使安装失败,这也可确保工作站保持稳定状态.正如您可能期望设计不佳的MSI文件可能违反Windows的内置功能,请参阅此主题中的其他帖子以获取更多详细信息.
  • 修补和更新 - 尽管Windows安装程序中的高度复杂的修补程序已在系统上完全管理和注册,因此可以通过检查已安装的内容来确定系统安全状态.更新被标准化为一些基本变体,这允许以更高的确定性执行更新.部署系统将能够报告哪些更新失败以及原因.
  • 日志记录 - Windows Installer提供了标准化的日志记录功能,该功能远远优于以前的版本,尽管几乎过于冗长.可以使用日志分析器对日志文件进行解密,并且可以使用自定义日志级别来消除生成具有不必要信息的过大日志文件.出于调试目的,详细日志记录非常有用.有关阅读MSI日志文件的手动方法,请参阅Rob Mensching的博客.

  • 当我读到这篇文章时,我不禁想到,"官僚主义陷入了困境." 当你正在处理想要弄乱安装程序所做的一切的控制狂时,听起来MSI很好.我实际上认为这是一个缺点,因为那时你必须设计你的安装程序来处理所有这些无法预料的情况.支持这种工作流听起来像一场噩梦.如果他们想要对安装进行这种级别的控制,那么他们编写自己的安装程序或使用脚本的优势是什么呢?他们可以自行修改? (6认同)
  • 我喜欢InnoSetup,我有一段时间没有使用InnoSetup,但基本上都是.MSI的缺点要复杂得多,所以如果你不需要这些额外的功能你肯定会尝试InnoSetup (5认同)
  • 谢谢,MSI 的总结非常好。现在我只是想知道,这些功能中哪些不存在于 Inno Setup 中? (2认同)
  • jpmc26:实际上恰恰相反。MSI对打包过程施加了如此多的限制,以至于许多应用程序比以前更容易处理以进行大规模部署,但是由于技术的陡峭学习,很多情况下封装的设计很不完善。在大多数情况下,由于该技术在很大程度上是透明的,因此可以纠正这些错误-但是它需要大量的经验和知识。MSI所有优点中最重要的是,卸载是其设计的一部分。这之前是一场噩梦。 (2认同)

Mik*_*ike 7

我迟到了回应这个帖子.我多年来一直使用Inno Setup为我公司的产品.它做得很好,但对我来说最大的障碍是自定义操作.在Inno Setup中,必须使用Pascal语言的变体.使用WiX工具集,我可以并且确实使用C#进行自定义操作,这对我来说更加舒适.不可否认,这是个人偏好,但这是我从一个优秀的Inno Setup平台切换到一个优秀的WiX平台的主要原因.这一点,以及使用MSI带来如此多好处的事实已经在另一个回复中提到过了.

坦率地说,对我来说,使用本书,WiX 3.6:Windows Installer XML开发人员指南,Pascal的学习曲线大于WiX .

  • 请参阅http://www.jrsoftware.org/ishelp/index.php?topic=scriptdll.根据该页面,您可以通过COM互操作调用.NET DLL.无论如何,我想这就是WiX在后台为你做的事情.所以它不太方便,但至少它是可用的. (2认同)

Cub*_*oft 6

我意识到这个答案来得很晚。但我看到这篇文章,认为这个问题的一个答案可能很简单:“为什么不两者兼而有之呢?” (吃蛋糕并拥有它)以及“当我只需花费精力购买一个并几乎免费获得第二个时,为什么要花费精力来实现两者呢?”

为此,我提出了一个带有 MSI 支持的 Inno Setup 脚本:

https://github.com/cubiclesoft/php-app-server/blob/master/installers/win-innosetup/yourapp.iss

这里使用了一些自定义 Pascal 函数,当传递/MSI={GUID}到命令行时,这些函数会启动,从而触发对脚本的有用更改(例如,“开始”或“添加/删除程序”中没有“卸载”图标)。

我提供了一个支持上述 Inno Setup 脚本的 WiX 脚本:

https://github.com/cubiclesoft/php-app-server/blob/master/installers/win-wix/yourapp.wxs

WiX 脚本包装基于 Inno Setup 的安装程序 EXE(唯一的有效负载),触发 Inno Setup 脚本以更兼容 MSI 的方式执行操作并生成 MSI。它并不完美,但它可以让您以 Inno Setup 方式完成操作,然后轻松获得 MSI 的大部分优势(例如 GPO/SCCM/DSC 静默部署),从而节省大量时间。如果主要只是将文件部署到系统和少量注册表项(即基本应用程序),那么这种方法效果最好。对于有很多组件的大型应用程序,我不会推荐这种方法,但如果您尝试它并且它有效,请告诉我!拥有一个启动 Inno Setup EXE 的 MSI 版本至少可以为进行部署的系统管理员提供一些合理的参考。

请注意,WiX 脚本依赖于 Inno Setup 方面的自定义 Pascal 函数。您不能只使用任何 ol' Inno Setup 安装程序并将其与 WiX 脚本包装在一起并期望它能够工作(它可能不会)。但也许 Inno Setup 的未来版本将原生支持类似的功能。

  • 没有伙伴。这个答案来得并不晚。它来得正是时候。正是我一直在寻找的东西! (2认同)