如何在Wix v4 MSI安装包中添加带勾选框的EULA及安装完成确认?
给Wix v4 MSI添加带勾选框的EULA和安装成功提示(VS2022)
一、实现带勾选框的最终用户许可协议(EULA)
1. 准备许可协议文件
先制作一个RTF格式的EULA文件(比如命名为License.rtf),将其添加到Wix项目中。然后在文件属性面板里,把「生成操作」设为Content,「复制到输出目录」选「如果较新则复制」,确保安装包能读取到这个文件。
2. 引用WixUI扩展
Wix v4的UI功能依赖扩展实现,右键项目→「管理NuGet程序包」,搜索并安装WixToolset.UI包即可。
3. 修改.wxs配置
打开主.wxs文件,做以下修改:
(1)添加基础配置
在<Product>标签内添加两行代码,用来存储用户是否同意协议的状态,同时引用基础UI模板:
<!-- 记录用户是否同意协议的属性 --> <Property Id="LICENSE_ACCEPTED" Secure="yes" /> <!-- 以WixUI_Minimal为基础UI模板,也可替换为WixUI_InstallDir等其他模板 --> <UIRef Id="WixUI_Minimal" />
(2)自定义带勾选框的协议对话框
Wix默认的协议对话框是单选按钮样式,我们直接替换为带复选框的版本。在<Product>标签内添加<UI>块:
<UI> <!-- 替换默认的协议对话框 --> <Dialog Id="LicenseAgreementDlg" Width="370" Height="270" Title="[ProductName] 许可协议"> <!-- 顶部横幅元素 --> <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="WixUI_Bmp_Banner" /> <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" /> <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" /> <!-- 显示协议内容的滚动文本框 --> <Control Id="LicenseText" Type="ScrollableText" X="20" Y="60" Width="330" Height="140" Sunken="yes" TabSkip="no"> <Text SourceFile="License.rtf" /> </Control> <!-- 核心:带勾选框的同意选项 --> <Control Id="AcceptCheckbox" Type="CheckBox" X="20" Y="205" Width="330" Height="18" Text="我接受许可协议中的条款" Property="LICENSE_ACCEPTED" CheckBoxValue="1" /> <!-- 上一步按钮 --> <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="上一步"> <Publish Event="NewDialog" Value="WelcomeDlg">1</Publish> </Control> <!-- 下一步按钮:只有勾选同意才能继续 --> <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="下一步"> <Publish Event="NewDialog" Value="InstallDirDlg">LICENSE_ACCEPTED = "1"</Publish> </Control> <!-- 取消按钮 --> <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="取消"> <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish> </Control> </Dialog> <!-- 可选:用户未勾选协议就点击下一步时的提示弹窗 --> <Dialog Id="InvalidLicenseDlg" Width="260" Height="85" Title="[ProductName] 安装提示"> <Control Id="Text" Type="Text" X="48" Y="15" Width="194" Height="30" NoPrefix="yes" Text="请先同意许可协议才能继续安装。" /> <Control Id="OK" Type="PushButton" X="100" Y="57" Width="56" Height="17" Default="yes" Cancel="yes" Text="确定"> <Publish Event="EndDialog" Value="Back">1</Publish> </Control> </Dialog> </UI>
二、添加安装成功确认提示
Wix默认的FinishDialog已经包含安装成功提示,你可以直接使用,也可以自定义提示文本:
1. 自定义成功提示文本
如果觉得默认提示不够明确,在<UI>块中添加以下代码,替换FinishDialog的提示内容:
<DialogRef Id="FinishDialog" /> <Control Id="FinishText" Type="Text" X="135" Y="70" Width="220" Height="40" NoPrefix="yes" Text="安装已成功完成!点击「完成」退出安装程序。" />
2. 可选:添加启动程序的勾选框
如果想让用户安装完成后直接启动程序,在FinishDialog中添加勾选框和对应的执行动作:
<!-- 启动程序的勾选框 --> <Control Id="LaunchCheckbox" Type="CheckBox" X="135" Y="110" Width="220" Height="18" Text="启动[ProductName]" Property="LAUNCH_APP" CheckBoxValue="1" /> <!-- 绑定勾选后的启动动作 --> <Publish Dialog="FinishDialog" Control="Finish" Event="DoAction" Value="LaunchApp">LAUNCH_APP = "1"</Publish> <!-- 定义启动程序的动作,将YourApp.exe替换为你的程序文件名 --> <CustomAction Id="LaunchApp" Directory="INSTALLFOLDER" ExeCommand="[INSTALLFOLDER]\YourApp.exe" Return="asyncNoWait" />
三、测试效果
保存修改后,清理并重新构建项目。生成的MSI安装包现在会实现:
- 弹出带勾选框的EULA,未勾选则无法进入下一步;
- 安装完成后显示自定义的成功提示(如果添加了启动选项,还可直接启动程序)。
内容的提问来源于stack exchange,提问作者Warpin
相关产品推荐
相关产品推荐

