You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:24:52