Wix引导程序应用程序-在复选框上安装多个包



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

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

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

我可以解释我是怎么做的。也许有更好的办法。我的复选框被绑定到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中。为什么我有:

<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,则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>

我希望你能明白。

最新更新