【问题标题】:Add more than one checkbox when install with Wix is over使用 Wix 安装结束时添加多个复选框
【发布时间】:2016-09-09 13:53:15
【问题描述】:

我为我的 C# 应用程序设置了一个设置。在设置结束时,我添加了一个建议启动应用程序的复选框。它运作良好。但我无法添加第二个复选框,建议启动可选安装程序。

有我的代码:

<?xml version="1.0" encoding="UTF-8"?>
<?define compagny = "myCompagny"?>
<?define product = "myProduct"?>
<?define version = "!(bind.FileVersion.MyProject.exe)"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <Product Id="*"
           Name="$(var.product)"
           Language="1033"
           Version="$(var.version)"
           Manufacturer="$(var.compagny)"
           UpgradeCode="PUT-GUID-HERE">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine"/>
    <Icon Id="icone.ico" SourceFile="$(var.MyProject.ProjectDir)\Images\icone-VR.ico"/>
    <Property Id="ARPPRODUCTICON" Value="icon.ico"/>
    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed."/>
    <Media Id="1" Cabinet="MyProject.cab" EmbedCab="yes"/>

    <Feature Id="ProductFeature" Title="$(var.product)" Level="1">
      <ComponentGroupRef Id="ProductComponents"/>
      <ComponentRef Id ="ApplicationShortcut"/>
      <ComponentRef Id ="ApplicationShortcutDesk"/>
    </Feature>

    <WixVariable Id="WixUILicenseRtf"
                 Value="..\license.rtf"/>
    <WixVariable Id="WixUIBannerBmp"
                 Value=".\Resources\WixUIBannerBmp.bmp"/>
    <WixVariable Id="WixUIDialogBmp"
                 Value=".\Resources\WixUIDialogBmp.bmp"/>

    <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch $(var.product)" />
    <Property Id="WIXUI_EXITDIALOGOPTIONALTEXT" Value="Warning. If you don't have optionnal package, consider to install it."/>

    <Property Id="WixShellExecTarget" Value="[#MyProject.exe]" />
    <CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

    <UI>
      <UIRef Id="WixUI_Minimal"/>
      <Publish Dialog="ExitDialog"
               Control="Finish" 
               Event="DoAction" 
               Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
    </UI>
  </Product>

  [...]
 </Wix>

如何添加另一个 CheckBox 来启动 ./Resources.myOptionalPackage.exe

如果我不能添加另一个复选框,我可以添加一个用于安装该功能的新对话框页面吗?

【问题讨论】:

    标签: c# wix wix3.7


    【解决方案1】:

    您必须使用自定义对话框创建自己的编辑 UI。

    1.先去官方GIT repository复制文件WixUI_Minimal.wxsExitDialog.wxs,或者复制整个仓库本地找文件。为您的项目/解决方案创建此文件的自己的副本,并将它们重命名为 WixUI_Custom.wxsMyExitDialog.wxs

    也替换新文件的内容,为WixUI_Minimal.wxs替换

    &lt;UI Id="WixUI_Minimal"&gt;&lt;UI Id="WixUI_Custom"&gt;

    ExitDialog.wxs 替换

    &lt;Dialog Id="ExitDialog" Width="370" Height="270" Title="!(loc.ExitDialog_Title)"&gt;&lt;Dialog Id="MyExitDialog" Width="370" Height="270" Title="!(loc.ExitDialog_Title)"&gt;

    两者都有

    &lt;Show Dialog="ExitDialog" OnExit="success" Overridable="yes" /&gt;&lt;Show Dialog="MyExitDialog" OnExit="success" Overridable="yes" /&gt;

    2.将产品中的&lt;UIRef Id="WixUI_Minimal"/&gt;更改为&lt;UIRef Id="WixUI_Custom"/&gt;

    3.现在您的安装程序应该像以前一样使用精确的 UI 打开,但来自您的类

    4.打开WixUI_Custom并更改

    &lt;Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999"&gt;&lt;Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999"&gt;

    所以 UI 将打开我们的新对话框。

    5.打开MyExitDialog.wxs并添加新的控制块,因为它已经存在

    <Control Id="OptionalCheckBox" Type="CheckBox" X="135" Y="190" Width="220" Height="40" Hidden="yes" Property="WIXUI_EXITDIALOGOPTIONALCHECKBOX" CheckBoxValue="1" Text="[WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT]">
      <Condition Action="show">
        WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT AND NOT Installed
      </Condition>
    </Control>
    

    将标识符Id 更改为任何内容,X,Y 用于对话框中的新位置,Property 用于新属性,其中将存储复选框值,Text 用于新属性,其中显示的文本存储。将 Text 属性也放置在 Condition 中,因此显示将取决于 text 属性集,就像在现有的复选框中一样。

    <Control Id="SecondCheckBox" Type="CheckBox" X="135" Y="220" Width="220" Height="40" Hidden="yes" Property="WIXUI_SECONDCHECKBOXVALUE" CheckBoxValue="1" Text="[WIXUI_EXITDIALOGSECONDCHECKBOXTEXT]">
      <Condition Action="show">
        WIXUI_EXITDIALOGSECONDCHECKBOXTEXT AND NOT Installed
      </Condition>
    </Control>
    

    6.现在,您可以使用新的 Checkbox 和使用在新 Control 中定义的新属性对现有复选框执行相同的操作。

    【讨论】:

    • 谢谢!我必须解决第 6 步(我的第二个复选框调用第一个复选框,可能是因为第二个 CustomAction 指向 WixShellExecTarget)但这是另一个问题。
    • 如果你知道我问问题stackoverflow.com/questions/39465862/…的答案,我不能调用我想要的.exe
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多