wix - WiX 2716 错误:无法为组件创建随机子组件名称
问题描述
我正在尝试为包含大约 9k 个文件的项目制作一个 Wix 安装程序。它构建良好,但是在运行安装程序时,在“计算空间要求”步骤中出现错误:
…
Action ended 14:31:38: CostInitialize. Return value 1.
MSI (c) (7C:F8) [14:31:38:089]: Doing action: FileCost
MSI (c) (7C:F8) [14:31:38:090]: Note: 1: 2205 2: 3: ActionText
Action 14:31:38: FileCost. Computing space requirements
Action start 14:31:38: FileCost.
MSI (c) (7C:F8) [14:31:38:093]: Note: 1: 2205 2: 3: MsiAssembly
MSI (c) (7C:F8) [14:32:40:728]: Note: 1: 2716 2: id_841c16be109411ec8e165c80b69a0712
MSI (c) (7C:F8) [14:32:40:740]: Note: 1: 2205 2: 3: Error
MSI (c) (7C:F8) [14:32:40:740]: Note: 1: 2228 2: 3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 2716
DEBUG: Error 2716: Couldn't create a random subcomponent name for component 'id_841c16be109411ec8e165c80b69a0712'.
我可以保证每个组件的 ID 都是唯一的。我试图通过谷歌搜索任何 msi 限制,但似乎没有什么适用于我的情况:我有 9k 个文件,msi 大小小于 1Gb。我尝试在功能之间拆分组件,以便每个功能的组件少于 1600 个,如此处所述http://www.msifaq.com/a/1043.htm,但这并没有解决问题。但是,当我将包含的文件总数减少到 ~8k 时,错误就会消失。问题的可能原因是什么?
这是我的 wxs 文件的一般表示:
<Wix>
<Product>
…
<Directory>
…
</Directory>
<FeatureGroup>
<Feature>
<Component Id="id_84aad4c710ac11ec92ad5c80b69a0712" Guid="84AAD4C8-10AC-11EC-A737-5C80B69A0712" Directory="id_811c471310ac11ec92af5c80b69a0712">
<File Id="id_84aad4c910ac11ec935c5c80b69a0712" Source="$(var.sourceDir)\bin\cache\dir\102.1\a47df368\shadercache\release\69128a2106de710dd07ad20c532a6a4c.v.desc" />
<RegistryValue Root="HKCU" Key="Software\Company\Product" Name="dummyName" Value="dummyValue" Type="string" KeyPath="yes" />
<RemoveFolder Id="id_84aad4ca10ac11ec9b0f5c80b69a0712" Directory="id_811c471310ac11ec92af5c80b69a0712" On="both" />
<RemoveFolder Id="id_84aad4cb10ac11eca2605c80b69a0712" Directory="id_811c471410ac11ec989a5c80b69a0712" On="both" />
<RemoveFolder Id="id_84aad4cc10ac11ecbb915c80b69a0712" Directory="id_811c471510ac11ec91155c80b69a0712" On="both" />
<RemoveFolder Id="id_84aad4cd10ac11ecaf505c80b69a0712" Directory="id_811c471610ac11ecbaa15c80b69a0712" On="both" />
<RemoveFolder Id="id_84aad4ce10ac11ec86a15c80b69a0712" Directory="id_811c471710ac11ec9b945c80b69a0712" On="both" />
<RemoveFolder Id="id_84aad4cf10ac11ecb6035c80b69a0712" Directory="id_811c471810ac11ec8ca15c80b69a0712" On="both" />
<RemoveFolder Id="id_84aad4d010ac11ec98ea5c80b69a0712" Directory="id_8111bfae10ac11ec8b805c80b69a0712" On="both" />
<RemoveFolder Id="id_84aad4d110ac11ec93125c80b69a0712" Directory="INSTALLDIR" On="both" />
</Component>
<Component>
…
</Feature>
<Feature>
…
</FeatureGroup>
</Product>
</Wix>
更新:通过删除所有 RemoveFolder 子组件(并将安装本身移动到 ProgramFiles 文件夹)解决了该问题。我假设 RemoveFolder 条目的总数超过了一些限制,尽管文档中提到的唯一限制涉及组件数量或文件数量。
解决方案
从MSI 帮助文件:
MSI Error: 2716 - Could not create a random subcomponent name for component '[2]'.
如果两个或多个组件名称的前 40 个字符相同,则可能发生。确保组件名称的前 40 个字符对于组件是唯一的。
您的组件名称看起来不像是这种情况,但它们非常相似。我看到 9 个相同的第一个字符,也许涉及更多字符的进一步名称冲突?请检查。
也许您的文件名有超过 40 个相同的字符?https://www.advancedinstaller.com/forums/viewtopic.php?t=8213
推荐阅读
- zap - Zap Python - 自动生成
- android - 从导航抽屉布局中删除间隙
- spring-boot - Spring Boot Consuming WebService - 如何使用 gradle 在不同的包上拥有多个 xsd 和 wsdl?
- function - 在另一个函数中使用相同的类对象
- firebase - Firebase 应用程序的 Google OAuth 同意屏幕
- apache-kafka - 消费者死后,消费者群体还能活多久?
- javascript - 反应 JS。NavLink activeClassName ICON, IMAGE
- java - 从 Java 中的泛型约束接口继承
- networking - 如何收集 k8s 集群 pod 的所有 igress 和 egress 流量?
- netlogo - 为什么在 IF 语句中使用 map 会出现问题?