checkbox - wix bootstrapper 应用程序 - 在复选框上安装多个包

标签 checkbox wix bootstrapper burn

我是 Wix burn 的新手。我正在制作一个 wix Bootstrapper 应用程序 (BA),其中包含要安装的多个 msi 和一个由一个带有复选框的面板和一个安装按钮组成的 UI。每个复选框都会邀请用户选择/取消选择一个 msi,然后用户按“安装”,我的 BA 应该安装选中的 msi。

在主 .wxs 文件中的 Chain 元素中,我计划使用带有 condition 属性的 MsiPackage 元素来确定是还是否,用户已选择它。

现在我的问题是:如何将这些条件属性与复选框连接起来?或者换句话说:如何将复选框信息获取到 Wix .wxs 文件中?

最佳答案

我可以解释一下我是如何做到的。愿有更好的办法。 我的复选框绑定(bind)到 ViewModel 类中的属性。当属性 setter 中的复选框值发生更改时,我设置变量的值 在 Bundle.wxs 文件中定义。

private bool _installApp1Checked;
public bool InstallApp1Checked
{
    get { return _installApp1Checked; }
    set
    {
    _installApp1Checked = value;
        if (value == true)
        {
            Bootstrapper.Engine.StringVariables["InstallApp1"] = "1";
        }
        else
        {
            Bootstrapper.Engine.StringVariables["InstallApp1"] = string.Empty;
        }
        RaisePropertyChanged("InstallApp1Checked");
    }
}

private bool _installApp2Checked;
public bool InstallApp2Checked
{
    get { return InstallApp2Checked; }
    set
    {
    _installApp2Checked = value;
        if (value == true)
        {
            Bootstrapper.Engine.StringVariables["InstallApp2"] = "1";
        }
        else
        {
            Bootstrapper.Engine.StringVariables["InstallApp2"] = string.Empty;
        }
        RaisePropertyChanged("InstallApp2Checked");
    }
}

private bool _installApp3Checked;
public bool InstallApp3Checked
{
    get { return _installApp3Checked; }
    set
    {
    _installApp3Checked = value;
        if (value == true)
        {
            Bootstrapper.Engine.StringVariables["InstallApp3"] = "1";
        }
        else
        {
            Bootstrapper.Engine.StringVariables["InstallApp3"] = string.Empty;
        }
        RaisePropertyChanged("InstallApp3Checked");
    }
}

在 Bundle.wxs 中我有:

<Wix ...>
    <Bundle ...>
...
    <Chain>
        ...
      <MsiPackage>
        ...
        <MsiProperty Name="InstallApp1" Value="[InstallApp1]"/>
        <MsiProperty Name="InstallApp2" Value="[InstallApp2]"/>
        <MsiProperty Name="InstallApp3" Value="[InstallApp3]"/>
        ...
      </MsiPackage>
        </Chain>
    </Bundle>
</Wix>

通过使用该标记,ViewModel 类的属性可在 wsx 文件中使用。 然后这些值在我的product.wxs中安装时可用:

<Product >
...

    <Property Id="InstallApp1">
    </Property>
    <Property Id="InstallApp2">
    </Property>
    <Property Id="InstallApp3">
    </Property>
    <Feature Id="ProductFeature" Title="Alvenos" Level="0">
      <ComponentRef Id="ProductComponents" />
      <Condition Level="1">InstallApp1</Condition>
    </Feature>
    <Feature Id="AlvenosVSIXFeature" Title="Alvenos" Level="0">
      <ComponentRef Id="AlvenosVsix" />
      <Condition Level="1">InstallApp2</Condition>
    </Feature>
    <Feature Id="AlvenosServerVSIXFeature" Title="Alvenos" Level="0">
      <ComponentRef Id="AlvenosServerVsix" />
      <Condition Level="1">InstallApp3</Condition>
    </Feature>

...
</Product>

您可以看到Feature标签的Level属性的默认值设置为0。这意味着应用程序不会被安装。 但是,如果在条件标签中 InstallApp[1]、[2] 或 [3] 设置为 1,则级别设置为 1 并且安装应用程序。 使用 ComponentRef 引用组件标记,该标记将包含有关您将安装的应用程序的目标文件夹的信息。

   <Fragment>
    <ComponentGroup Id="InstallApp1" Directory="[target directory id]>
      <Component Id="ProductComponent">
        <File Source="[your app part of the installer]" />
      </Component>
      ...
  </Fragment>

我希望你能明白。

关于checkbox - wix bootstrapper 应用程序 - 在复选框上安装多个包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24748623/

相关文章:

wpf - 在 WPF 中更改 View 时,ViewModel 中的文本框值未更新

.net - 重新启动后恢复安装程序

.net - 如果存在 Microsoft SQL Server 实例,则绕过 SQLExpress 的安装

css - 将文本字段标签与复选框标签对齐

jQuery - 切换选择所有复选框

javascript - 如何在jquery中获取li复选框的选中状态

wix该目录在用户配置文件中,但未在RemoveFile表中列出

Wix 文件与标准 Windows 文件关联

c# - InstallFinalize 后 WIX 自定义操作修改 INSTALLFOLDER 中的文件

javascript - 在复选框的输入文本中一一追加