AppSearch 的序列号是 50 - 对吧?

AppSearch has sequence number 50 - right?

这不是个好问题,但请耐心等待。

从长远来看,我正在使用 Remember Pattern 来保存 CMD 行输入 属性 值,并且在安排我的 25 多个自定义操作以保存 CMD 行提供的属性之前遇到了问题AppSearch,因为 Remember Pattern 依赖于 CMD 提供的 属性 在 AppSearch 之前保存的值。我收到的错误消息如下所示:

error LGHT0179: The InstallUISequence table contains an action 'SaveCmdLine_SERV ICE_ACCOUNT' which cannot have a unique sequence number because it is scheduled before or after action 'AppSearch'. There is not enough room before or after this action to assign a unique sequence number. Please schedule one of the actions differently so that it will be in a position with more sequence numbers available. Plea se note that sequence numbers must be an integer in the range 1 - 32767 (inclusive).

检查使用 Orca 编译的 MSI,AppSearch 的序列为 50。很难找到关于 MSI 序列 table 的文档,但根据 link 来自 this SO quesion,AppSearch 的序列号应为 400。我使用的解决方法是在使用 Orca 检查生成的 MSI 时将 AppSearch 转移到更大的序列号。这似乎还可以。

但是50是一个很小的数字,为什么设置为50而不是400?它是由 Windows 安装程序 API 或 Wix 控制的吗?

更新: 将 AppSearch 更新到序列 400 后,我遇到一个问题,即使用以下代码使用 bootstrap 要求 .Net 4.5 将失败。

  <Chain>
  <PackageGroupRef Id="NetFx451Redist" />
  <MsiPackage Name="$(var.OutputName).msi" SourceFile="MyInstaller.msi" DisplayInternalUI="yes" />
</Chain>

经检查,看起来我必须安排 LaunchConditions 从序号 100 到序号 600,这样它仍然会在 AppSearch 之后发生,因此检查 .Net 框架预请求仍然在职的。我想这可能是 AppSearch 被 WiX 这么早安排的原因之一。

WiX 默认标准动作序列号:我怀疑 - 无法确定 - WiX 使用以下 XML 文件 (actions.xml) 来定义默认的标准动作序列编号:https://github.com/wixtoolset/wix3/blob/develop/src/tools/wix/Data/actions.xml (this is the WiX source stored on github.com).

Extract: 内联你特别要求的内容:

<actions xmlns="http://schemas.microsoft.com/wix/2003/04/actions">
  <..>
    <action name="AppSearch" sequence="50" InstallExecuteSequence="yes" InstallUISequence="yes" />
  <..>
</actions>

答案:所以我认为答案是WiX在这个源文件中定义了大多数标准动作的顺序(actions.xml)。该顺序与 MSI API 完全没有任何关系 - 但只有少数其他配置有意义或被允许。因此,MSI API 施加了适用的限制。这些标准动作必须以标准顺序相互关联——并有一定的余地。

异常:标准操作RemoveExistingProducts可以移动到几个不同的位置——例如"leeway"。上面的 (actions.xml) 文件中缺少该特定的标准操作 - 可能是因为这个原因:它没有固定的默认定位。它有(至少)3 个可配置的。我假设它是在 linker 代码 (light.exe) 中动态处理的。

Roll Your Own?:我相信用不同的标准动作序列号默认编译你自己的 WiX 二进制文件并非不可能方案,但编译 WiX 可不是一件容易的事。

WiX 4:请注意,在 WiX 4 中,相应的源文件似乎位于:https://github.com/wixtoolset/wix4/blob/develop/src/libs/WixToolset.Data/Data/actions.xml


来自 MSI SDK:

标准动作顺序的限制在下面的 link 中描述。似乎 AppSearch 排序不受限制 - 下面的第三个 link):