解包重编译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
相关产品推荐
相关产品推荐

