我们目前使用WiX来构建MSI文件,因此这是我唯一拥有使用经验的MSI构建工具。不过我知道你可以在Visual Studio中本地构建安装程序。使用WiX和Windows Installer之间有什么区别?它们各自的优缺点是什么呢?
我们目前使用WiX来构建MSI文件,因此这是我唯一拥有使用经验的MSI构建工具。不过我知道你可以在Visual Studio中本地构建安装程序。使用WiX和Windows Installer之间有什么区别?它们各自的优缺点是什么呢?
MSI文件本质上是以COM结构化存储文件形式存储的削减版SQL Server数据库。这是Microsoft Office中使用的文件格式(请注意,MS Office曾经使用OLE / COM文件 - 但是新版本现在使用Office Open XML),它被设计为一种将分层数据存储在单个文件中的方法。本质上是一个文件系统内的文件,具有各种类型的存储流 - 其中之一是要安装在一个或多个cab文件中的文件。
早期的MSI文件/数据库最好使用第三方工具直接修改,例如InstallShield, Advanced Installer和Wise Package Studio(由于法律问题不再提供 - 请参见当前可用的MSI工具比较)。这些工具将MSI文件存储在其本机“可安装”格式中,作为COM结构化存储文件。这意味着您的MSI文件既是源代码又是可执行文件 - 并且以二进制格式存储。这使得安装项目的源代码控制变得困难。不同MSI数据库之间的二进制差异很难处理,并且由于数据库引用完整性,即使对于经过培训的人来说,MSI中最基本的更改也会影响数十个表格,使得难以看清楚发生了什么变化。
保持简单,遵循最佳实践,不要与设计作斗争 - 它会反击。如果WiX无法完成某项任务,那么它很可能正试图帮助您避免部署问题。为了简化或更改要求,请与您的经理进行沟通,而不是与MSI作斗争 - 这次做起来更容易 :-)。
大多数时候,我们发现不寻常的设置设计和使用自定义操作会导致很多不必要的复杂性,或者说是部署反模式。这个问题通常可以通过应用程序设计的微小变化或使用内置的MSI构造来避免。一个好的经理会允许简化部署的努力,但他们需要理解为什么这是必要的。我喜欢licensing作为一个例子,说明如何通过避免老式或不必要的复杂应用程序和部署解决方案来改变做事方式并简化部署。这是一条非常重要的建议。在我个人看来,只读自定义操作(可能设置属性)则相反:它们是被推荐的。在大多数情况下,它们不会带来额外的重大风险——因为它们不会对需要回滚支持的系统进行任何更改,并且可以非常有效地将安装逻辑聚集在一个地方——在简单的脚本语言中编写时,它们非常适合协同工作,比如JavaScript(处理MSI API时有些笨拙)、VBScript(错误处理和整体语言特性较差,但在MSI API方面经过了良好的测试。老实说,微软似乎正在试图“杀死”这种语言。JavaScript至少在Web开发中得到了广泛应用)。
关于脚本方面的总结:部署专家普遍认为,所有类型的脚本操作通常都很难调试,易受到反病毒软件的干扰,并且缺乏实现高级编码结构所需的语言功能。 总之:使用脚本编写强壮的代码很困难 - 无论是哪种类型。 可以使用托管代码自定义操作(.NET),但由于它们需要安装.NET,因此建议安全的做法是使用C++编写自定义操作。这样可以最小化依赖项,非常好的调试和高级语言结构。这里有一个长时间的“讨论”:不同自定义操作类型的利弊(不太好,只是真实经验的转储)。虽然可能值得一读 - 自定义操作是部署失败的主要原因(链接到我反对它们的宣传),这就带我们来到了下一个问题:部署的整体复杂性(以及如何处理它)。
部署是将异构目标计算机从一个稳定状态迁移到另一个稳定状态的复杂过程 - 这需要有纪律的方法,因为:
Visual Studio MSI项目文件是一种轻量级的方式,在Visual Studio中创建MSI文件,其功能集非常有限。有传言说要用WiX XML项目替换Visual Studio中的MSI项目类型,这通常是人们现在构建MSI文件的方式。不要使用此项目类型。由于缺乏灵活性和严重的错误,它已经给许多用户带来了严重的问题。
Orca是Windows SDK工具,允许打开、编辑和在一定程度上比较二进制MSI文件。实际上,这个工具大部分是由后来创建WiX工具包的Rob Mensching编写的,当时他正在Microsoft的Windows Installer团队工作。该工具还允许执行其他操作,如生成用于修改MSI文件的转换文件和一些其他技术操作。虽然它是一个非常基本的工具,缺少商业工具中可用的大多数高级功能,但由于其可靠性、简单性和"干净"的特点(保存时不会添加“默认垃圾”到MSI中 - 第三方工具添加自定义表和类似垃圾),因此它仍然是应用程序打包器最喜欢使用并希望拥有的,用于调试和小修复。我使用它进行小型MSI更新、调试、检查摘要流、创建基本转换、查看补丁、软件包验证和其他重要操作。
实际上,我猜这是一种高级工具,具有简单的界面,并不是基本工具 :-)。为了获得 Orca,您需要安装Windows SDK (!)。当工具的大小如此之小时,这有点过头了,但至少很容易知道它在哪里可以获得,而不必寻找单独的下载。更新:如果您安装了 Visual Studio 和 SDK,请搜索 Orca-x86_en-us.msi
并安装它。如果没有,请找一个安装了 Visual Studio 的朋友搜索并将其发送给您?这是一个很小的文件。
还有一些免费的替代工具,如此处所述(向底部滚动):How can I compare the content of two (or more) MSI files?
DTF - Deployment Tools Foundation 是一个.NET类套件,用于以编程方式处理MSI文件。它写得很好,易于使用,非常强大,现在随主WiX下载一起提供。它是任何项目中至关重要的组成部分,用于自动化企业对MSI文件的使用。这里有一个brief answer on serverfault.com讨论了它的使用并描述了其基本组件。DTF附带的帮助文件将快速入门,您永远不会再回头使用Win32函数或COM类来访问MSI文件。
市场上有很多其他的Windows Installer工具,你可以在选择哪种安装产品?InstallShield、WiX、Wise、Advanced Installer等(与上述链接相同)中找到一些与WiX进行比较的工具。
WiX创建使用Windows Installer的MSI包。因此,WiX使用Windows Installer引擎。
Visual Studio只是WiX的替代品,另一种安装程序制作工具。我不建议使用它,因为其功能极为有限,仅提供基本功能。
如果您对WiX感到满意,请继续使用它。