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

时间:2014-07-15 01:35:37

标签: checkbox wix bootstrapper burn

我是Wix烧伤的新手。我正在制作一个带有多个msi的wix Bootstrapper应用程序(BA)以及一个包含一个带复选框和一个按钮 install 的面板的UI。每个复选框都会邀请用户选择/取消选择msi,然后用户按下“Install”,我的BA应该安装已检查的msi。

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

现在我的问题是:如何将这些条件属性与复选框相关联?或者换句话说:如何将复选框信息导入Wix .wxs文件?

1 个答案:

答案 0 :(得分:2)

我可以解释一下我是怎么做到的。愿有更好的方法。 我的checkBox绑定到ViewModel类中的属性。当在属性的setter中更改checkBox值时,我设置变量的值 在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>

通过使用标记,可以在wsx文件中使用ViewModel类的属性。 然后,这些值在我的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.这意味着该应用程序不会是istalled。  但是如果在条件标签InstallApp [1],[2]或[3]中设置1,则Level设置为1并安装应用程序。  使用ComponentRef引用Component标记,该标记将包含有关您将要安装的应用程序的目标文件夹的信息。

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

我希望你明白这一点。