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

Wix Toolset v3:为WixUI_Minimal添加复选框对话框以条件运行EXE

Wix Toolset v3.11 自定义复选框对话框+条件运行EXE问题修复

问题说明

使用Wix Toolset v3.11添加带复选框的自定义对话框,希望安装完成后根据复选框状态条件运行EXE,但代码出现语法错误无法配置成功。

原代码

<Product Id="*" Name="MyCompany Test Installer" Version="1.0.0" Manufacturer="MyCompany" UpgradeCode="{356FCAF3-500B-4EE4-A205-E1AB1915EE55}" Language="1033">
    
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Platform="x64" />

    <MediaTemplate EmbedCab="yes" />

    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="MyCompany">
          <Component Id="ProductComponent" Guid="{7BE266C9-156D-4DDC-A5BA-09F7567BBBA3}">
            <File Id="MyExe" Source="ToolPalettesFolderSync.exe" KeyPath="yes" />
          </Component>
        </Directory>
      </Directory>
    </Directory>

    <Feature Id="MainFeature" Title="MyComapny Test Installer" Level="1">
      <ComponentRef Id="ProductComponent" />
      <ComponentRef Id="ToolPalleteFolderSyncShortcut" />
      <ComponentGroupRef Id="INSTALLFOLDER_files" />
    </Feature>

    <Property Id="RUN_EXE" Value="0" />

  <UI>
    <UIRef Id="WixUI_Minimal" />

    <Dialog Id="MyCheckboxDialog" Width="370" Height="270" Title="My Custom Dialog">
        <Control Id="Checkbox" Type="CheckBox" X="20" Y="20" Width="330" Height="17" Property="RUN_EXE" Text="Run MyExecutable after installation?" CheckBoxValue="1" />
        <Control Id="Next" Type="PushButton" X="240" Y="243" Width="56" Height="17" Default="yes" Text="Next">
            <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
        </Control>
        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back">
            <Publish Event="NewDialog" Value="WelcomeDlg">1</Publish>
        </Control>
    </Dialog>

    <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="MyCheckboxDialog">1</Publish>
    <Publish Dialog="MyCheckboxDialog" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
    <Publish Dialog="MyCheckboxDialog" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
</UI>

    <InstallExecuteSequence>
      <Custom Action="RunMyExe" After="InstallFinalize">RUN_EXE="1"</Custom>
    </InstallExecuteSequence>

    <CustomAction Id="RunMyExe" FileKey="MyExe" ExeCommand="" Return="asyncNoWait"/>

  </Product>

错误信息翻译

错误 LGHT0094: 未解析的引用符号 'Component:ToolPalleteFolderSyncShortcut' 在片段中。
错误 LGHT0094: 未解析的引用符号 'ComponentGroup:INSTALLFOLDER_files' 在片段中。
警告 LGHT1076: 对话框 MyCheckboxDialog 中的控件 Next 已发布事件 NewDialog,同时在 UI 片段中也存在针对该控件的相同发布,可能导致冲突。

修复方案

  • 移除未定义的组件引用:原代码Feature节点中引用的ToolPalleteFolderSyncShortcut和INSTALLFOLDER_files未定义,直接删除这两行引用。
  • 移除重复的Publish事件:自定义对话框的Next和Back按钮内部已定义Publish事件,UI节点下的重复定义会导致冲突,删除对应重复行。
  • 统一XML缩进:修正原代码中UI节点的缩进不一致问题,确保XML结构规范。

修复后完整代码

<Product Id="*" Name="MyCompany Test Installer" Version="1.0.0" Manufacturer="MyCompany" UpgradeCode="{356FCAF3-500B-4EE4-A205-E1AB1915EE55}" Language="1033">
    
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Platform="x64" />

    <MediaTemplate EmbedCab="yes" />

    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="MyCompany">
          <Component Id="ProductComponent" Guid="{7BE266C9-156D-4DDC-A5BA-09F7567BBBA3}">
            <File Id="MyExe" Source="ToolPalettesFolderSync.exe" KeyPath="yes" />
          </Component>
        </Directory>
      </Directory>
    </Directory>

    <Feature Id="MainFeature" Title="MyComapny Test Installer" Level="1">
      <ComponentRef Id="ProductComponent" />
    </Feature>

    <Property Id="RUN_EXE" Value="0" />

    <UI>
        <UIRef Id="WixUI_Minimal" />

        <Dialog Id="MyCheckboxDialog" Width="370" Height="270" Title="My Custom Dialog">
            <Control Id="Checkbox" Type="CheckBox" X="20" Y="20" Width="330" Height="17" Property="RUN_EXE" Text="Run MyExecutable after installation?" CheckBoxValue="1" />
            <Control Id="Next" Type="PushButton" X="240" Y="243" Width="56" Height="17" Default="yes" Text="Next">
                <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
            </Control>
            <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back">
                <Publish Event="NewDialog" Value="WelcomeDlg">1</Publish>
            </Control>
        </Dialog>

        <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="MyCheckboxDialog">1</Publish>
    </UI>

    <InstallExecuteSequence>
        <Custom Action="RunMyExe" After="InstallFinalize">RUN_EXE="1"</Custom>
    </InstallExecuteSequence>

    <CustomAction Id="RunMyExe" FileKey="MyExe" ExeCommand="" Return="asyncNoWait"/>

</Product>

验证说明

  • 复选框状态绑定到RUN_EXE属性,勾选时值为1,否则为0
  • 安装完成后,InstallFinalize步骤后会根据RUN_EXE="1"的条件触发自定义动作运行EXE
  • 使用Return="asyncNoWait"确保EXE运行不阻塞安装程序结束

内容的提问来源于stack exchange,提问作者jclay06

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:54:50