我是 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/