WIX是基于Windows Installer的安装包制作工具集,它通过XML文件来定义安装包的所有内容,包括安装的文件、注册表项、快捷方式、安装界面等。编写正确的XML文件是生成可用WIX安装包的核心步骤。

WIX XML文件的基础结构
一个最基础的WIX XML文件需要包含固定的命名空间和根标签,整体结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="测试程序" Language="1033" Version="1.0.0.0" Manufacturer="测试厂商" UpgradeCode="替换成唯一的GUID">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="已安装更高版本的程序,无法继续安装。" />
<MediaTemplate />
<Feature Id="ProductFeature" Title="主程序" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<!-- 这里添加需要安装的文件组件 -->
</ComponentGroup>
</Fragment>
</Wix>
其中<Wix>是根标签,所有配置都写在这个标签内部。<Product>标签定义安装包的核心属性,包括产品名称、版本、厂商、升级规则等。<Fragment>标签用于存放可复用的配置片段,比如文件组件、目录定义等。
常用标签及配置说明
目录定义标签
安装包需要指定文件的安装路径,通过<Directory>标签可以定义目录结构,示例如下:
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="测试程序">
<!-- 安装目录下的子目录可以继续嵌套定义 -->
</Directory>
</Directory>
</Directory>
</Fragment>
TARGETDIR是Windows Installer的预定义根目录,ProgramFilesFolder对应系统的Program Files目录,INSTALLFOLDER是我们自定义的安装根目录,后续组件的文件都会安装到这个目录下。
文件组件标签
需要安装的文件要放在<Component>标签中,每个组件需要设置唯一的Id和Guid,示例如下:
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Id="MainExeComponent" Guid="替换成唯一的GUID">
<File Id="MainExe" Source="$(var.TestProject.TargetPath)" KeyPath="yes" />
</Component>
<Component Id="ConfigFileComponent" Guid="替换成唯一的GUID">
<File Id="ConfigFile" Source="config.ini" KeyPath="yes" />
</Component>
</ComponentGroup>
</Fragment>
<File>标签的Source属性指定源文件的路径,如果是WIX项目引用了其他项目,可以用$(var.项目名称.TargetPath)的方式获取输出文件路径。KeyPath设置为yes表示该文件是组件的关键路径,用于判断组件是否已安装。
快捷方式标签
如果需要创建桌面或开始菜单快捷方式,需要使用<Shortcut>标签,示例如下:
<Component Id="DesktopShortcutComponent" Guid="替换成唯一的GUID" Directory="DesktopFolder"> <Shortcut Id="DesktopShortcut" Name="测试程序" Target="[INSTALLFOLDER]Test.exe" WorkingDirectory="INSTALLFOLDER" /> <RemoveFolder Id="DesktopFolder" On="uninstall" /> <RegistryValue Root="HKCU" Key="Software测试厂商测试程序" Name="DesktopShortcut" Type="integer" Value="1" KeyPath="yes" /> </Component>
Directory属性指定快捷方式的存放位置,DesktopFolder是预定义的桌面目录,开始菜单目录可以用ProgramMenuFolder。<RemoveFolder>标签确保卸载时删除对应的快捷方式,<RegistryValue>用于记录快捷方式的状态,避免重复创建。
完整示例:生成带主程序和快捷方式的安装包
以下是一个完整的WIX XML文件示例,包含目录定义、主程序文件、桌面快捷方式和开始菜单快捷方式:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="测试程序" Language="1033" Version="1.0.0.0" Manufacturer="测试厂商" UpgradeCode="12345678-1234-1234-1234-123456789012">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="已安装更高版本的程序,无法继续安装。" />
<MediaTemplate />
<Feature Id="ProductFeature" Title="主程序" Level="1">
<ComponentGroupRef Id="ProductComponents" />
<ComponentRef Id="DesktopShortcutComponent" />
<ComponentRef Id="StartMenuShortcutComponent" />
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="测试程序">
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="ProgramMenuSubfolder" Name="测试程序">
</Directory>
<Directory Id="DesktopFolder" />
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Id="MainExeComponent" Guid="87654321-4321-4321-4321-210987654321">
<File Id="MainExe" Source="$(var.TestProject.TargetPath)" KeyPath="yes" />
</Component>
</ComponentGroup>
</Fragment>
<Fragment>
<Component Id="DesktopShortcutComponent" Guid="11111111-2222-3333-4444-555555555555" Directory="DesktopFolder">
<Shortcut Id="DesktopShortcut" Name="测试程序" Target="[INSTALLFOLDER]Test.exe" WorkingDirectory="INSTALLFOLDER" />
<RemoveFolder Id="RemoveDesktopFolder" On="uninstall" />
<RegistryValue Root="HKCU" Key="Software测试厂商测试程序" Name="DesktopShortcut" Type="integer" Value="1" KeyPath="yes" />
</Component>
<Component Id="StartMenuShortcutComponent" Guid="66666666-7777-8888-9999-000000000000" Directory="ProgramMenuSubfolder">
<Shortcut Id="StartMenuShortcut" Name="测试程序" Target="[INSTALLFOLDER]Test.exe" WorkingDirectory="INSTALLFOLDER" />
<RemoveFolder Id="RemoveProgramMenuFolder" On="uninstall" />
<RegistryValue Root="HKCU" Key="Software测试厂商测试程序" Name="StartMenuShortcut" Type="integer" Value="1" KeyPath="yes" />
</Component>
</Fragment>
</Wix>
编写好XML文件后,使用WIX的编译工具candle.exe编译成wixobj文件,再用light.exe链接生成msi安装包即可。如果是在Visual Studio中使用WIX项目,直接生成项目就会自动完成编译和链接步骤。
WIXXML安装包制作Windows_Installer修改时间:2026-07-18 07:45:32