You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解包重编译WiX MSI报LGHT0130 LockPermissions主键重复错误

WiX反编译重编译报LGHT0130重复主键错误解决方案

问题复现场景

解包WiX生成的*.msi安装包获取wxs源文件,再重新编译回MSI包时,执行以下命令:

"C:\Program Files (x86)\WiX Toolset v3.11\bin\dark.exe" installer.msi -x out 
[...]

"C:\Program Files (x86)\WiX Toolset v3.11\bin\candle.exe" *.wxs -o obj\ -ext "C:\Program Files (x86)\WiX Toolset v3.11\bin\WixUtilExtension.dll"
[...]

"C:\Program Files (x86)\WiX Toolset v3.11\bin\light.exe" obj\*.wixobj -o bin\installerModVersion.msi -ext "C:\Program Files (x86)\WiX Toolset v3.11\bin\WixUtilExtension.dll"

在light.exe链接阶段报错:

C:\ProgramData[...]\installer.wxs(172) : error LGHT0130 : The primary key 'INSTALLFOLDER/CreateFolder//[WIX_ACCOUNT_LOCALSYSTEM]' is duplicated in table 'LockPermissions'. Please remove one of the entries or rename a part of the primary key to avoid the collision.

报错位置对应installer.wxs第172行附近代码:

<Directory Id="drivers" Name="drivers">
    <Directory Id="INSTALLFOLDER" Name="ProgramName" ShortName="mn7flurp">
        <Component Id="InstallFolderPermissions" Guid="{F5BC8C33-8B18-4FE8-8D5D-555B766161FD}" KeyPath="yes" Win64="yes">
            <CreateFolder Directory="INSTALLFOLDER">
<!-- line 172 -->    <Permission User="[WIX_ACCOUNT_LOCALSYSTEM]" Read="yes" SpecificRightsAll="yes" ReadAttributes="yes" WriteAttributes="yes" ReadExtendedAttributes="yes" WriteExtendedAttributes="yes" CreateFile="yes" CreateChild="yes" DeleteChild="yes" Traverse="yes" GenericAll="yes" />
                <Permission User="[WIX_ACCOUNT_ADMINISTRATORS]" GenericAll="yes" />

全程未修改dark.exe生成的源文件,编译直接失败。

错误原因

这是dark.exe反编译工具的已知缺陷:

  • 原始MSI的LockPermissions表中,针对LOCALSYSTEM账号同时存在两条权限记录:一条是安装时创建目录自动继承的默认权限,另一条是安装包作者手动添加的显式全权限记录。反编译时工具未做去重处理,将两条记录都导出为独立的<Permission>节点。
  • WiX链接阶段生成LockPermissions表时,同一个目录、同一个用户的权限条目主键唯一,两条指向同一对象同一用户的条目直接触发主键重复错误。
  • 额外冗余点:出问题的权限条目同时配置了GenericAll="yes"和所有细分权限项,GenericAll本身已经覆盖所有读写、修改等权限,细分权限配置属于重复无效配置。

修复方案

直接修改报错位置的权限配置即可,不需要改动其他逻辑,任选一种操作:

  • 方案1(最简便):删除第172行整段重复的[WIX_ACCOUNT_LOCALSYSTEM]权限条目,检查同节点下是否存在另一条配置了GenericAll="yes"的LOCALSYSTEM权限条目,保留该条即可,不会丢失原有权限配置。
  • 方案2:如果需要保留细分权限配置,删除第172行权限条目中的GenericAll="yes"属性,同时全局搜索wxs文件,删除其他所有针对INSTALLFOLDER目录、用户为[WIX_ACCOUNT_LOCALSYSTEM]的多余<Permission>节点,保证同一目录同一用户只存在一条权限配置。

修改完成后重新执行candle编译、light链接命令即可正常生成MSI安装包。

内容的提问来源于stack exchange,提问作者user1618465

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 09:54:23