首页 > 解决方案 > AppSearch 的序列号为 50 - 对吧?

问题描述

感觉这不是一个好问题,但请稍等片刻。

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

错误 LGHT0179:InstallUISequence 表包含一个操作“SaveCmdLine_SERV ICE_ACCOUNT”,该操作不能具有唯一的序列号,因为它被安排在操作“AppSearch”之前或之后。在此操作之前或之后没有足够的空间来分配唯一的序列号。请以不同的方式安排其中一项操作,以使其处于具有更多可用序列号的位置。请注意,序列号必须是 1 - 32767(含)范围内的整数。

经检查使用 Orca 编译的 MSI,AppSearch 的序列为 50。如果有的话,很难找到有关 MSI 序列表的文档,但根据此 SO 问题的链接,AppSearch 的序列应该为 400。我正在使用的解决方法是在使用 Orca 检查生成的 MSI 时将 AppSearch 转移到更大的序列号。这似乎还可以。

但是 50 是一个相当低的数字,为什么设置为 50 而不是 400?它是由 Windows Installer API 还是 Wix 控制的?

更新:将 AppSearch 更新到序列 400 后,我遇到了一个问题,即使用以下代码使用引导程序要求 .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 这么早安排的原因之一。

标签: wixwindows-installer

解决方案


WiX 默认标准操作序列号:我怀疑 - 在无法确定的情况下 - WiX 使用以下 XML 文件 (actions.xml) 来定义默认标准操作序列号): https://github.com/wixtoolset/wix3/ blob/develop/src/tools/wix/Data/actions.xml(这是存储在github.com上的 WiX 源)。

提取:内联您特别要求的内容:

<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可以移动到几个不同的位置——作为“回旋余地”的一个例子。上述 ( ) 文件中缺少该特定标准动作actions.xml- 可能是因为这个原因:它没有固定的默认定位。它有(至少)3 个可配置的。我会假设它是在链接器代码(light.exe)深处动态处理的。

自己动手?: 我相信用不同的标准动作序列号默认方案编译你自己的 WiX 二进制文件不是不可能的,但编译 WiX 是一项不小的任务。

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


从 MSI SDK

下面的链接描述了对标准动作排序的限制。看来AppSearch排序不受限制 - 下面的第三个链接):


推荐阅读