【问题标题】:AppSearch has sequence number 50 - right?AppSearch 的序列号为 50 - 对吧?
【发布时间】:2018-08-30 05:22:57
【问题描述】:

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

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

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

在检查使用 Orca 编译的 MSI 时,AppSearch 的序列为 50。很难找到有关 MSI 序列表的文档(如果有的话),但根据来自this SO quesion 的链接,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 框架预请求仍然有效。我想这可能是 WiX 这么早安排AppSearch 的原因之一。

【问题讨论】:

  • 序列号的实际值无关紧要,它必须大于零,当然顺序很重要(值-4..0有特殊含义)。 See the docs。所以我觉得 WiX 的“数量不足”有点奇怪。
  • @zett42,我保存 CMD 行属性值的方式依赖于计划在 AppSearch 之前保存每个属性的自定义操作(因为之后属性值可能会被为该属性保存的注册表值覆盖。因此,AppSearch 序列为 50,“FindRelatedProducts”为 25,只剩下 24 个可用的插槽。
  • 您是否尝试在InstallExecuteSequence 中插入&lt;AppSearch Sequence="n"/&gt;?确保将“n”设置为仅与下一个标准动作的序列索引减 1 一样高。
  • @zett42,谢谢你,我不知道你可以这么容易地自己定义序列号。它比我目前的解决方案更好。
  • 我还提出了另一个相关问题,但不幸的是,我正在寻找的解决方案可能不容易定义为其他 SO 问题。但同样,我真正要寻找的只是指示或解释。对于任何有兴趣回答的人。 stackoverflow.com/questions/52105942/…

标签: wix windows-installer


【解决方案1】:

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) 的深处动态处理。

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

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

【讨论】:

  • 如果它是由 Wix 定义的,对我来说,如果它让我很恼火,因为我们有几个项目使用相同的模式,我可能只是发送了一个错误报告,同时仅更改我们的 MSI 项目中的 AppSearch 序列号。
猜你喜欢
  • 1970-01-01
  • 2010-09-16
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多