Wix Toolset v3 - 将自定义对话框添加到 WixUI_Minimal,并带有在安装后有条件运行 EXE 文件的复选框

问题描述 投票:0回答:1

我正在尝试添加一个带有复选框的自定义对话框,该复选框将在 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>

Visual Studio Error Messages

wix wix3.11
1个回答
0
投票

我建议看一下我的开源项目 IsWiX。它具有使这一切变得更容易的模板。例如,您只需取消注释一行,然后您就会得到一个连接到向导循环中的附加内部对话框。你可以看一下源代码作为例子:

https://github.com/iswix-llc/iswix/blob/main/Application/IsWiX2022AddIn/VotiveMSISolutionTemplate/SetupProjectTemplate/UI.wxs https://github.com/iswix-llc/iswix/blob/main/Application/IsWiX2022AddIn/VotiveMSISolutionTemplate/SetupProjectTemplate/UI-CustomDialog.wxs

您通常会正确处理它,但我怀疑发布元素的顺序值是错误的。这些取决于您使用的内置对话框集。最好的办法是在 ORCA 中打开它并查看原始表数据,看看该值应该是多少才能达到预期的效果。

https://learn.microsoft.com/en-us/windows/win32/msi/controlevent-table

需要注意的例外是每个控件最多可以发布一个 NewDialog 或一个 SpawnDialog 事件。如果您需要创作多个 这个表中的NewDialog和SpawnDialog控制事件,还包括 Condition 字段中的条件语句确保最多有一个 事件已发布。如果有多个NewDialog和SpawnDialog控件 为同一控件选择事件,仅选择带有 当控件发布时,排序列中的最大值被发布 已激活。

另外,我注意到你的 EXE 被安排在 InstallFinalize 之后。这可能是不正确的。应在 InstallFinalize 之前安排它。该属性还应具有空“”而不是 0 的默认值,并且应标记为安全。

按照您现在的方式,它在安装程序事务之外运行,因此不会提升运行速度。

© www.soinside.com 2019 - 2024. All rights reserved.