首页 > 解决方案 > 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 条目的总数超过了一些限制,尽管文档中提到的唯一限制涉及组件数量或文件数量。

标签: wixwindows-installer

解决方案


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


推荐阅读