使用WiX来构建Windows安装程序

607 阅读6分钟

使用WiX来构建Windows安装程序

通过一点点的XML,你可以从你的CI/CD管道中自动为你的代码创建Windows安装程序。

所有的Windows应用程序都需要被安装。当然,你可以把你的二进制文件和资产包在一个压缩文件中,让用户自己去安装,但这意味着他们不可能再回来。这就是各种Windows打包和安装工具的用武之地,它们为你提供了一种方法来构建可执行文件,将你的代码的所有不同元素放在Windows安装的正确位置,确保所有必要的依赖都已安装,图标和快捷方式都在开始菜单中,随时可以启动。

你如何去构建一个安装程序?许多工具都利用了标准的Windows Installer打包工具,但要想获得正确的配置可能很难,特别是当你把打包作为CI/CD(持续集成和持续交付)构建过程的最后一部分时。当你的代码、工件和依赖性在构建过程中发生变化时,你需要一个可脚本化的配置环境,它可以由你的构建工具管理,并集成到你的开发环境和代码库中。

微软的第一个开源工具是为开发者准备的

这就是WiX(Windows Installer XML工具集)开始发挥作用的地方。它在微软内部已经使用了很长时间,并在2004年作为其第一个开源版本使用通用公共许可证创造了历史,最终由Outercurve基金会管理,然后被转移到.NET基金会。开发工作一直持续到这一时期,项目负责人成立了FireGiant,以提供商业支持和额外的工具。

WiX的核心是XML,它被用作声明性代码,被视为构建安装程序的源代码。你可以在Visual Studio中安装WiX工具,并在你的应用程序旁边编写一个安装程序,使用相同的源码控制和构建工具来发送一个可安装的包。它能够比基本的Windows安装程序做得更多,支持应用程序和Windows配置,并能够与服务器工具(如IIS和SQL Server)一起工作。此外,它还可以创建复杂的安装包,处理依赖性和先决条件,确保你的代码在安装后拥有运行所需的一切。

目前WiX的稳定版本是3.11.2版,从2019年开始提供。这一差距是由于开发团队专注于具有新架构的新版本。 WiX 4.0的预览版现在已经推出,非常值得研究。它建立在现代.NET上,更适合在现代CI/CD环境中使用。一切都从.NET命令行运行,允许你快速将其构建为脚本和行动;它可以作为Azure DevOps管道的一部分或在GitHub行动中使用。将一个新的拉动请求推送到一个分支,就可以得到一个随时可以运行的安装程序。

下载并安装WiX

你可以从GitHub上下载当前版本的WiX工具集,这也是大多数开发工作的地方。这里有工具集、Visual Studio扩展、以及作为平台一部分的核心工具的存储库。这是一个相当活跃的资源库,目前大部分的工具都处于维护状态,而大部分的工作都是为了即将到来的WiX 4。

WiX是一个用C#编写的.NET应用程序。它目前使用的是.NET框架,正在开发的WiX 4将迁移到新的.NET平台,至少需要.NET Core v3.1。新版本还将各种WiX工具,如candle和light,纳入一个单一的命令行工具。它现在可以作为一个.NET工具从.NET命令行进行安装。

在WiX中构建一个安装程序描述

目前,你可能会使用WiX 3.x。这是一个熟悉用于构建安装程序的底层XML语法的好方法。虽然各版本之间有一些变化,但使用稳定版会给你一个适当的基础,并在新版本到来时有一套可以升级的安装程序文件。

WiX使用XML来定义已安装应用程序的结构,使用Windows Installer所期望的定义。你需要从定义你的应用程序所使用的目录开始,使用默认的Windows程序文件结构。你可以在这里为与你的应用程序一起打包的文件创建一个目录层次结构,设置名称以及说明如何在磁盘上创建目录。

一旦你定义了你的目标目录,你就可以创建一个应用程序资产的XML列表。每个文件都需要有自己的组件参考,以及一个GUID。GUID很重要,因为WiX使用它们来管理更新。可执行组件可以与校验和一起存储,这将在安装时验证文件。

Windows Installer被设计成可以处理大量的文件,所以你最终会需要创建一个长长的组件列表。在实践中,你必须将其自动化,要么使用Visual Studio中的WiX扩展,要么拥有一个可以为你生成适当XML的组件注册表应用程序。这可以像Excel电子表格一样简单,它有内置的XML工具。

其他的XML元素被用来定义和编写注册表键,定义一个根和一个键,并有适当的值。注册表项被视为组件,所以它们需要一个GUID与它们的内容一起。

使用WiX Visual Studio扩展工作

使用Visual Studio扩展可以节省大量的时间。你可以在你的解决方案中为安装程序XML创建一个新项目。你可以从一些简单的事情做起,比如在你的WiX项目中添加一个应用程序的引用和一行代码。一旦构建完成,它就会创建你的安装程序,随时可以使用。WiX的Visual Studio工具支持选择不同的变量,可以预先填充安装程序的XML。另外,你也可以用它来构建你自己的自定义工具。

WiX的一个有用的功能是它的反编译器,可以用于任何Windows Installer包。它接收你的安装程序并生成WiX代码,然后可以进行编译和测试。这是一个很好的工具,因为它可以将现有的由其他工具构建的安装程序带入你的WiX环境,准备用于更新和新版本。

像WiX这样的工具表明,微软和开源社区可以一起工作,建立每个人都可以使用的工具。显然,仍然有内部的WiX版本来处理Windows等微软项目的规模,但公共工具极大地简化了安装程序的构建和管理。WiX 4中新的命令行驱动的工具(以及向跨平台和跨处理器的.NET工具的转移)应该使安装程序的自动化工作变得更加容易,使它们成为Windows应用CI/CD管道的默认终端。