共享属性:“错误 LGHT0094:未解析的符号引用”

Sim*_*ton 1 wix

我正在尝试在多个产品之间共享一个属性,默认情况下未设置该属性。除了一种产品,我想将其设置为一个值。

所以在 shared.wxi 中:

<Include>
    <Property Id="MYPROP" Secure="yes"></Property>
</Include>
Run Code Online (Sandbox Code Playgroud)

在 product.wxs 中:

<Wix>
    <Product>
        <?include ..\shared\shared.wxi?>
        <SetProperty Id="MYPROP" Value="1" After="InstallInitialize"/>
    </Product>
</Wix>
Run Code Online (Sandbox Code Playgroud)

但是我们的构建系统抱怨:

error LGHT0094 : Unresolved reference to symbol 'WixAction:InstallUISequence/InstallInitialize' in section 'Product:{583365A4-93C2-434A-BCD8-8A1035DF2AC7}'
Run Code Online (Sandbox Code Playgroud)

我什至不确定After="InstallInitialize"(或 Before=...) 是否正确,我只想在包含之后但在考虑其他任何事情之前设置此产品的属性。此外,我对整个 WIX 系统几乎一无所知,我只是想在知识渊博的同事休假期间快速修复某些问题。

更新 - 现在我尝试了这个而不是SetProperty,但仍然得到同样的错误:

  <CustomAction Id="CA_SETMYPROP" Property="MYPROP" Value="1" />
  <InstallUISequence>
    <Custom Action="CA_SETMYPROP" Before="InstallInitialize" />
  </InstallUISequence>
Run Code Online (Sandbox Code Playgroud)

更新 2 - 现在我替换InstallUISequenceInstallExecuteSequence它并且它做了我想要的。有关解释和替代解决方案,请参阅 Rob Mensching 的回答。

  <CustomAction Id="CA_SETMYPROP" Property="MYPROP" Value="1" />
  <InstallExecuteSequence>
    <Custom Action="CA_SETMYPROP" Before="InstallInitialize" />
  </InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

Rob*_*ing 6

当我第一次遇到这个问题时(最近相当),这个问题我陷入了困境。错误消息是正确的,但可能更有帮助*

根问题是InstallInitialize不存在的InstallUISequence。默认情况下,SetProperty使用bothSequence属性。这意味着 set 属性是在 和 中的InstallInitialize操作之前/之后安排InstallExecuteSequenceInstallUISequence。由于InstallInitialize不存在于InstallUISequence你会得到错误:

Unresolved reference to symbol 'WixAction:InstallUISequence/InstallInitialize'
Run Code Online (Sandbox Code Playgroud)

解决方法是使用Sequence='execute'只安排属性的设置在InstallExecuteSequence那里InstallInitialize的生活。或者,您可以选择不同的操作来安排之前/之后。

使用SetProperty会像这样:

<SetProperty Id="MYPROP" Value="1" After="InstallInitialize" Sequence="execute" />
Run Code Online (Sandbox Code Playgroud)

*改进错误信息在我的雷达上。