使用哪种安装产品?InstallShield,WiX,Wise,Advanced Installer等。

90

我目前正在研究如何摆脱我们当前使用的安装程序包(Wise Installer 9),转而使用能够处理Windows Vista、Windows 7和64位系统等问题的工具。本地化安装程序将对我们有益,因为我们确实有许多加拿大法语客户。

我们目前有以下技术的软件包和实用程序的安装:

  • Progress 4GL
  • Visual Studio 2005
  • Visual Studio 2008
  • .NET Compact Framework 3.5

我已经看过WiXInstallShield,还有Altiris制作的替代品,用于取代旧的Wise系统。

我还没有太多尝试InstallShield,但从我所见/安装的一切来看,它似乎是业内最受欢迎的之一。我浏览了一些与InstallShield相关的Stack Overflow标签,并且很想知道这个团队对此的看法。

我是默认去找他们吗?WiX在非.NET方面有多好?


请查看这个旧的讨论:https://dev59.com/nXVC5IYBdhLWcg3w9GA9?lq=1。 - Stein Åsmul
36
我发现很惊奇的是,在stackoverflow上,任何与将开发的解决方案部署到目标计算机相关的话题都被标记为“离题”。将您开发的应用程序送达最终用户是软件交付过程中至关重要的一部分!不要干扰那些试图获得此过程帮助的人。看看答案收到的赞数(相对于文章浏览量非常少)。有些人确实在寻找这些信息。 - Stein Åsmul
1
谢谢Yvette。我会尽力维护这个内容,只要它还有意义。这是一次尝试编写无法在书中找到的信息 - 但人们需要这些信息来做出明智的决策,以便将他们的软件交付给最终用户 - “尽力而为”,而不声称“正确”。 “尝试客观性”-为什么这个“术语”让我笑呢? :-) - 显然因为它在所有自命不凡中意味着诚实、知情的意见,来自一个有缺陷的专业人士,只能提供帮助的意愿。我是一个“实地务实者”,而不是一个“领域专家”。 - Stein Åsmul
5个回答

160

更新,2018年8月,一个新的更短的选项:如何创建Windows安装程序。 着重总结MSI及其主要优点,列出可用的主要工具(带有下载链接),以及提到一些新的、流行的部署技术


我曾在大型企业从事软件开发的发布管理构建工程师设置开发人员应用程序打包人员SOE工程师部署工程师(SCCM)。

在这个过程中,我使用了大多数主要的打包工具(有些是不同版本):InstallShieldWise(不幸的是,已经下市)、WiXAdvanced Installer(只是测试)、Orca和我还测试了其他一些工具(链接到http://www.installsite.org上的“面向开发人员的Windows Installer编写工具” - 一个相当详尽的工具列表)。我还使用了一些不常见的打包和部署工具,如计算机关联Unicenter - 现在可能已经下市。还有一个页面介绍非MSI安装程序编写工具

更新: 如果您需要一款MSI工具来比较两个MSI文件版本,或者只是从MSI文件中提取信息,您可能想阅读这篇答案: 我如何比较两个(或更多)MSI文件的内容? (重点介绍免费的MSI工具)。

本文提供了不同创作工具的优点及需要注意的问题概述。尽管这些工具有许多相似之处,但它们实际上却有着很大的不同。我们尽力以客观的方式描述经验和积极和消极之处。


相关部署主题

  • 在深入了解不同工具的评估之前,这里有一些关于MSI技术本身的信息链接。
  • 这是一个常见的部署任务的概述,通常在部署工具中得到支持,并描述了为什么部署似乎变得越来越复杂。
  • 很多人似乎认为MSI不值得麻烦,有时候这是可以理解的。好处是真实的——特别是对于企业部署,但是一些问题也是如此。

安装盾

  • 功能丰富。
  • 始终更新最新技术。
  • (设置) 面向开发人员。
    • 提供不同版本。
    • 旗舰产品AdminStudio提供面向设置开发人员的工具以及面向重打包工具。
  • 非常好的发布管理本地化构建过程自动化功能。至少比竞争对手更好。
    • 对于复杂产品,InstallShield的发布管理可能是其主要卖点。您可以轻松交付各种风味:语言版本、OEM版本、查看器、应用程序版本等,使用发布标志和类似结构。
    • 发布标志基本上用于有条件地排除或包含每个编译设置中某些产品的某些部分-这通常是制作专业设置系列时所要求的一大部分。
    • {{link1:Installshield中的发布视图}}允许完全概述所有不同的设置类型和版本。您可以查看所有语言版本和为Web(一个大型设置文件)或为可重新分发媒体(外部源文件)以及其他任何风味而提供的发布设置。
      • 对于每个发布和版本,您都可以覆盖重要设置,例如产品名称、产品版本、包、产品和升级代码以及许多其他必需的设置,这些设置必须根据产品版和语言版本动态更改。
      • 在许多其他产品中,这种类型的发布和版本管理可能更难实现。对于较简单的设置,这种灵活性可能不那么重要。
    • 该产品的自动化API允许从各种类型的构建自动化脚本轻松“远程控制”它。
      • 还有命令行构建模块(用于专用构建服务器)。
      • 使用常规VBScript / VBA / Javascript自动化很容易完全自动化整个产品套件的构建。
    • 完全支持本地化,使用字符串表支持不同的设置语言。
      • 基本对话框也以多种语言提供现成的(额外费用)。
      • 您只需要本地化自己的设置内容(功能列表标题、任何自定义对话框或消息框、带文本的图像等...)-仍然有很多工作要做。
      • 您可以交付一个巨大的多语言设置。根据我的经验,这不是推荐做法(阅读本地化部分)。最糟糕的问题是您必须在交付英文版之前以所有语言本地化所有新内容和更改。这几乎从未得到市场/销售的认可。而且总会有需要重建和重新发布单个语言的修复程序,然后您希望在不经过所有其他语言的UAT和QA的情况下这样做。最好为每种语言提供单独的构建(易于实现)。
    • 良好的社区支持:{{link3:用户社区论坛}}。
    • 相当不错的GUI,常见事物相对容易。
    • 全面的MSI

      Wise

      Wise已正式退役,但它之前曾经复活过。不幸的是一些法律问题可能会让它最终退役 - 据我所知。这对于如此优秀的工具来说是一种遗憾。它被Altiris收购,然后是Symantec。现在似乎已经下市。我仍然保留Wise优秀特点的摘要:

      • 快速、易用且功能丰富。
        • 整体易用性非常好,功能非常出色。
        • 缺乏一些(非常)高级的功能,例如IIS、高级发布管理等...
      • 管理员/重新打包者导向。
        • 比Installshield更少关注代码。
        • 独特的能力和灵活的图形脚本编辑器。
        • 设计良好的安装配置GUI。
      • 对于寻求快速且相对容易地部署其应用程序的小型开发团队也非常出色。
      • 有时会稍微落后于最新技术(与Installshield相比),但相对“无错误”。
      • 直观的GUI,常见事物非常容易(非常)。
      • 非常好地处理了安装顺序配置和脚本样式编辑器中的自定义操作。更多的GUI脚本,较少的编码。
      • 非常稳定,几乎没有重大错误。
      • 帮助资源和社区支持不及InstallShield,但仍然很好。
      • 我的首选工具用于调试和原型制作(快速、稳定、易于使用、差异特性极佳)。
      • 关于差异特性(允许二进制比较两个MSI文件)。
        • 我尝试过的其他工具都无法接近Wise用于不同MSI文件的二进制差异。
        • 差异查看器的易用性和清晰度不亚于出色。
        • 对于企业打包,这种差异特性可以是工作中非常关键的一部分,因为您需要管理数百甚至数千个不同版本的软件包。
      • 主观评价而言:我最喜欢的打包工具。非常可靠。
        • 这款工具不再提供确实令人遗憾。
        • 我们始终可以希望“重生”(我已经看到一些看起来像Wise的GUI片段在其他工具中)。

      WiX (快速入门技巧)

      • 最大的优点是文本源文件。无需将源代码存储为二进制文件,这几乎不可能跟踪更改和进行适当的版本控制。
        • 对于开发团队来说,适当的文本源在分支、版本控制和合并方面带来了很大的差异。这对于公司内部开发尤其重要,因为工作过程复杂,周转快,并且有很多开发人员(我个人认为)。
        • 需要使用文本源文件的必要性和用法是创建WiX工具包的核心。这里有一篇快速而不完整的“WiX历史”,包含更多细节内容。推荐阅读以了解WiX的基础和理论基础。
        • 一些将安装程序存储为二进制文件的部署工具可能会遇到二进制源出现神秘问题而永远无法有效跟踪的情况。
          • 特别是在更新工具后,也更新了源中的格式(出于任何原因),会发生这种情况。
          • 升级通常会影响数十个表格和数百个记录,使得跟踪真正的问题变得不可能。
          • 症状包括突然开始的慢编译、突然变慢的安装速度、无法解释的编译错误,甚至是完全的文件损坏等等。
          • 使用WiX,您可以完全透明并且源代码“精简”。当正确操作时,它更加清洁和可靠,并且源代码的自动更新是可能的,但不会导致对数十个MSI表进行级联更改。结合源代码控制,变更容易被跟踪并且(有望)理解——没有添加神秘的未记录内容。
          • 尽管如此,必须注意的是从WiX 3升级到WiX 4源文件似乎并非易事。希望这是一次性情况。说实话,我不确定为什么会发生这种情况,我也没有关于此的最新信息。
          • 也许可以从Rob Mensching的博客http://robmensching.com/blog/和Bob Arnson的博客https://www.joyofsetup.com/中获取真实的新闻。正如互联网所能实现的那样,直接从消息源获取消息——这是一个美好的世界;-)。传言称他们正在做“一只又一只的乌龟”。
      • 非常少的重大错误,非常稳定
        • 对于那些在其他工具中苦苦挣扎,经常出现长期、间歇性、无法解释的错误的人来说,这是一种恩赐。{删除了战争故事}。
        • 更好的是:问题实际上似乎得到了解决,有时候还有社区的帮助——这对于开源工具包而言很适当。大多数情况下,核心团队会处理它们。
      • 非常功能丰富,但有时候使用起来有点困难。
        • 需要时间去适应,即使你已经习惯

          高级安装程序

          • 我没有在真正的开发中使用过这个工具。
          • 非常易于使用,界面友好。
          • 更新
            • 在开发测试安装期间,工具本身具有极好的集成日志记录。非常令人印象深刻。
            • 也可用于企业重新打包,称为"Architect版"。
            • 功能丰富。编译各种设置并支持所有新技术(App-X、App-V等)。
            • App-V的支持似乎非常广泛。
            • 可以导入其他工具的源文件(Installshield、Inno、Wix、Wise、NSIS、Visual Studio、桌面桥接等)。没有经过我的充分测试。
          • 据我所见,将项目存储在专有的文本格式中。
          • 看起来很稳定,并且关键地通过良好的GUI隐藏了一些MSI复杂性,显示直观的复选框和选项,而不是SDK样式的标志和属性。这是一件好事,在目前WiX中完全缺失。
          • 看起来可能适合原型设计和测试,具有非常强大的GUI和自动化常用功能。
          • 我错过了InstallShield的发布视图,以及其发布标志和构建自动化设置以及其他发布管理功能(现在可能已经改进)。
          • 总体来说,这是一个可靠的工具,看起来最适合寻找轻松部署应用程序的开发人员。在这方面类似于Wise。
          • 由于实际经验太少,无法写更多的内容。试一试吧。

          其他工具

          • Orca是免费的Windows SDK工具,允许打开、编辑二进制MSI文件,并在一定程度上进行比较。它还允许其他操作,例如生成用于修改MSI文件的转换文件和其他一些技术操作。这是我始终喜欢安装并可用的基本工具。有一个更详细的Orca段落讨论了它的使用(向底部看)。通常情况下,您必须安装Windows SDK才能获得Orca(只需安装最新版本并搜索该工具)。
          • 有一个名为“Super Orca”的免费工具被推荐给我,以及“InstEd”。我只是简单地使用过它们,但它们看起来不错,并且比Orca更容易获得(无需下载Windows SDK)。
          • 还有许多其他工具。以下是来自http://www.installsite.org的工具列表,指示该工具是否仍在积极维护:http://www.installsite.org/pages/en/msi/authoring.htm(感谢Phil Wilson提供的链接-我无法找到他的答案)。
          • 我想我也可以包括一个链接到wikipedia的安装软件列表

          工具推荐?

          我不直接提供工具推荐,但我可以提出一些“观察结果”并提供一些决策方面的链接。

          对于任何严肃的内部开发团队,我建议使用WiX。虽然其他工具更易于使用(这非常重要,有时是唯一重要的事情),但WiX在其灵活性、可扩展性、稳定性和使用XML文本源文件方面表现出色,但也需要付出一定的代价。由于其免费许可证,每个开发人员都可以查看和编译源代码,并且更改很容易被跟踪、还原或批准。管理开发人员都更新单个WiX源的过程仍然具有挑战性(与常规开发工作没有区别-没有什么是容易的)。

          对于企业重新打包(这可能略微超出stackoverflow.com的开发人员关注范围),我想目前主要选择是Flexera AdminStudioAdvanced Installer Architect。还有其他产品可用,installsite.org上有详细信息: 工具:重新打包和企业部署

          对于寻找快速简便的应用程序部署方式的小型开发团队,我想 InstallshieldAdvanced Installer 是最常见的“基于GUI”的工具。它们提供了许多功能,您将能够快速交付设置。正如已经说明的那样,有时这是唯一重要的事情。实际上往往如此。然而,使用WiX可以交付出色的安装程序,但需要更多的知识。有一个学习曲线,并且目前存在一些严重的限制,特别是关于GUI方面-但是基础技术非常稳定且免费。并且重要的是还有许多其他工具(来自http://www.installsite.org)可能更适合您的任务-特别是如果只需要基本的部署功能的简单应用程序。我没有提供更多关于这些工具的信息,这是不公平的,因为它们相当有能力,但使用或建立得较少。
          我应该明确表示,我推荐WiX用于企业团队交付内部应用程序,因为他们可以利用WiX提供的灵活性,也将拥有可用的专业知识和技术能力来处理WiX的复杂性。并且他们可以在需要时培训新人。这是一个非常重要的问题。除非您已经具有大量Windows Installer知识,否则学习WiX并不容易 - 如果您已经具备这些知识,则很容易上手,但仍需要时间,因为它非常灵活,没有更好的词来形容它:“棘手”-就像真正的开发一样,您可以真正掌控,但需要精确。一旦设置了WiX源,就可以轻松处理 - 您知道正在发生什么。
          总之:如果您是寻找快速将应用程序交付给客户的小型(或大型)第三方供应商,那么最好使用旨在提供易用性和快速解决有限更改的商业工具。特别是对于IIS,商业工具过去未能提供我所需的灵活性。而内部开发团队至少应该尝试使用WiX。

          最后提醒:一般来说,Advanced InstallerInstallShield和已经停止更新的都可以用于软件虚拟化打包。目前我不知道WiX是否有此功能。如果您有相关信息,请在评论中添加或编辑此帖。


          实用须知

          如果可以选择,我通常会使用其他工具进行原型设计,而使用WiX进行实现。您可以使用WiX的dark.exe(MSI反编译器)来反编译现有的MSI文件。有时,我会在Wise或InstallShield中实现某些内容,编译MSI并将其反编译为WiX格式。然后,我将WiX标记提取出来,并存储到我的主WiX文件中。这样做非常好用,而且通常非常快速。再加上heat.exe工具用于自动创建组件,我可以在练习几次后在不到10分钟内打包一个庞大的IIS网站。之后,我就可以使用WiX提供的完整可定制性,同时也能享受其他工具带来的易用性。

          清理反编译源代码并不容易,但也不是什么难事。需要一些MSI知识,您可能需要花费一些时间来捣鼓。请注意,下载商业工具的试用版本来生成和反编译MSI文件是不建议的。生成的MSI文件通常会被“水印”功能所标记,难以去除。


          一些链接:


3
+1 - 很好的分析。我们目前正在认真考虑 WiX,尤其是是否使用 WixSharp 会有助于简化我们的使用并帮助我们摆脱手动编辑 XML 的困扰。 - Mat Nadrofsky
14
阅读这篇文章后,我们选择了Advanced Installer。我们没有时间学习WiX,但我们有钱,Advanced Installer的专业版让我们在约两个小时内开始运行。WiX似乎需要几天的阅读,而Advanced Installer的向导和配置非常流畅。(我与其没有任何关联,只是我的体验非常棒。) - a paid nerd
我喜欢它:“这是一个飞跃。” 一方面是的,但讽刺的是,它正在跳入一些古老而简单的东西:使用文本,这是Unix哲学的一部分。 - Keith Pinson
1
是的,Keith。但如果你尝试使用MSI文件作为源和可执行文件,你很快就会得出结论,文本源文件更可取。文本不仅仅是Unix哲学,它是开发者哲学。这是正确进行差异比较的唯一方法。 - Stein Åsmul
1
哇,WixAware... £4000 的 WiX GUI... 那真的是严重定价过高了。 - Jammer
显示剩余6条评论

21

你可以试用免费软件Inno Setup:我使用它已经很久了,从未让我失望过!


18

WiX在非.NET方面有多好?

WiX从设计上支持所有Windows Installer功能。 Windows安装程序早于.NET。

个人而言,我更喜欢WiX而不是InstallShield,因为

  • XML文本格式允许检查提交、合并分支之间的更改
  • 构建自动化应该包括设置生成,使用WiX很容易
  • wixlib文件与组件组定义允许进行模块化设置开发。 不需要担心依赖项的依赖项等
  • 没有许可或部署问题,我们只需将WiX工具集包含在SVN项目的/tools文件夹中

当我们使用InstallShield时,这些都是痛点。 WiX确实有一个非常陡峭的学习曲线。


2
+1 - 很好的回应。感谢您的见解。关于审查和合并的观点很好。我们在使用现有的.wse(Wise)脚本时遇到了问题。 - Mat Nadrofsky

6
我已经几年没有使用InstallShield了。在我的上一份工作中,我们将其替换为NSIS,主要是因为其二进制格式使版本控制困难,并且有几次源文件简单地损坏了,无法恢复。当然这可能与SourceSafe有关!除此之外,它过于复杂。不要误会 - 我们正在做一些相当复杂的安装程序,具有许多条件路径、合并模块和复杂的UI,但即使对于这些来说,它也过于复杂了。NSIS拥有一个很棒的插件系统,可以使用LogicLib plugin进行命令式编程,生成自动卸载文件等许多其他功能。

我正在为这个答案添加最新的信息: Visual Studio有一个扩展程序,可以直接在IDE中编写NSIS(以及Inno Setup)安装程序。使用脚本语言甚至更容易(具有语法高亮、智能感知等功能): https://marketplace.visualstudio.com/items?itemName=unSignedsro.VisualInstaller - Slappy

1

我接手了一些InstallShield(v12)项目。这些文件都是文本/XML格式,因此没有版本控制问题。我们有一台使用其命令行工具的构建机器,效果很好。我不喜欢的是(a)每个开发人员位置的成本和(b)错误。

Inno Setup功能非常强大/灵活,通常有多种实现目标的方法,这导致了陡峭的学习曲线。由于我们的产品在Widows上运行,如果必须更换,我可能会先研究Microsoft随附MSDN订阅的安装程序解决方案。


+1 - 感谢您的回复和背景介绍,这总是很重要的。我不知道IS可以与SCM兼容。好好知道! - Mat Nadrofsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接