【问题标题】:How to pass AddLocal-Parameter from wix standard bootstrapper to a MsiPackage如何将 AddLocal-Parameter 从 wix 标准引导程序传递到 MsiPackage
【发布时间】:2017-10-10 14:25:19
【问题描述】:

使用 WIX Tools v3.10,我曾经将变量 AddLocal 添加到我通过 Name="ADDLOCAL" 传递给 MsiProperty 的包中,如 by BryanJ in "Pass parameters from bootstrapper to msi bundle package" 所述。

<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 的适当方法是什么?

【问题讨论】:

标签: wix bootstrapper wix3.11


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    而不是使用 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 测试,我发现卸载没有按我的意愿运行。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 我没有自定义引导程序。
      【解决方案4】:

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

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

      【讨论】:

      • 我很确定引擎变量与 msi 属性无关
      猜你喜欢
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多