繁体   English   中英

如何将 AddLocal-Parameter 从 wix 标准引导程序传递到 MsiPackage

[英]How to pass AddLocal-Parameter from wix standard bootstrapper to a MsiPackage

使用 WIX 工具 v3.10,我曾经将变量AddLocal添加到我传递给MsiProperty的包中, Name="ADDLOCAL" ,如BryanJ 在“将参数从引导程序传递到 msi 包包”中所述

<Bundle>
...
  <Variable Name="InstallLevel" Type="numeric" bal:Overridable="yes" Value="1"/>
  <Variable Name="AddLocal" Type="string" bal:Overridable="yes" Value=""/>
  <Chain>
    <MsiPackage Id="Addin64bit_loc" Vital="yes" DisplayInternalUI="yes" ...
                EnableFeatureSelection="yes" >
      ...
      <MsiProperty Name="INSTALLLEVEL" Value="[InstallLevel]"/>
      <MsiProperty Name="ADDLOCAL" Value="[AddLocal]"/>
    </MsiPackage>
  </Chain>
</Bundle>

现在切换到 v3.11 后,我收到此警告,它将在 v4 中变为错误:

Warning CNDL1149: The 'ADDLOCAL' MsiProperty is controlled by the bootstrapper and cannot be authored. 
(Illegal properties are: 'ACTION', 'ADDLOCAL', 'ADDSOURCE', 'ADDDEFAULT', 'ADVERTISE', 'ALLUSERS', 'REBOOT', 'REINSTALL', 'REINSTALLMODE', or 'REMOVE'.) 
Remove the MsiProperty element. 
This restriction will be enforced as an error in WiX v4.0.

那么在 v3.11 中将 ADDLOCAL 参数从引导程序命令行传递到 Msi 的适当方法是什么?

我遇到了同样的问题,最终只使用了 ADDLOCAL 属性集的转换。

我没有使用 AddLocal,而是发现添加如下代码:

<Feature Id="FeatureB" Level="0">
  <Condition Level="1">INSTALL_FEATUREB="1" OR FEATUREB_INSTALLED="1" 
  </Condition>
</Feature>

我的 msi 文件以合理的方式运行,允许我添加/删除功能。 修改自:使用https://support.firegiant.com/hc/en-us/articles/230912227-Control-feature-states-for-silent-install-

我喜欢使用 'Variable=X' 语法,因为我觉得它更容易阅读。 如果没有 FEATUREB_INSTALLED 测试,我发现卸载没有达到我想要的效果。

您可以像这样影响自定义引导程序项目中的 ADDLOCAL 参数:

_bootstrapper.PlanMsiFeature += (_, ea) =>
{
    ea.State = (needToInstall) ? FeatureState.Local : FeatureState.Absent;
};

好吧,你总是可以像这样从后面的代码中将一个值传递给一个变量。

Bootstrapper.Engine.StringVariables["AddLocal"] = "your value";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM