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):
这不是个好问题,但请耐心等待。
从长远来看,我正在使用 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):