生成MSI安装包时出现WIX0001错误:句柄无效
解决Wix创建MSI时"句柄无效"的Cabinet压缩错误
错误详情
wix.exe : error WIX0001: WixToolset.Core.Native.WixNativeException: wixnative.exe执行失败,错误代码:-2147467259 - 句柄无效。输出: ---> System.ComponentModel.Win32Exception (6): 句柄无效。 ---内部异常堆栈跟踪结束--- at WixToolset.Core.Native.WixNativeExe.Run() in D:\a\wix\wix\src\wix\WixToolset.Core.Native\WixNativeExe.cs:line 81 at WixToolset.Core.Native.Cabinet.Compress(IEnumerable`1 files, CompressionLevel compressionLevel, Int32 maxSize, Int32 maxThresh) in D:\a\wix\wix\src\wix\WixToolset.Core.Native\Cabinet.cs:line 60 at WixToolset.Core.WindowsInstaller.Bind.CabinetBuilder.CreateCabinet(CabinetWorkItem cabinetWorkItem) in D:\a\wix\wix\src\wix\WixToolset.Core.WindowsInstaller\Bind\CabinetBuilder.cs:line 192 at WixToolset.Core.WindowsInstaller.Bind.CabinetBuilder.ProcessWorkItems() in D:\a\wix\wix\src\wix\WixToolset.Core.WindowsInstaller.Bind\CabinetBuilder.cs:line 123
排查与解决步骤
检查待压缩文件状态
确保所有要打包的文件未被其他进程锁定(如编辑器、杀毒软件),当前用户对文件有读取权限。可尝试关闭占用程序,或复制文件到新目录后重新打包。调整Cabinet压缩配置
过高的压缩等级可能触发句柄异常,尝试降低压缩级别。修改Wix项目中Media元素的CompressionLevel属性:<Media Id="1" Cabinet="media1.cab" EmbedCab="yes" CompressionLevel="medium" />若设置了
MaxCabSize,尝试增大该值或暂时移除限制,避免分卷压缩引发的句柄问题。升级Wix Toolset版本
该错误可能是特定版本的bug,升级到最新稳定版。旧版wixnative.exe在处理部分压缩场景时可能存在句柄泄漏问题,新版本通常会修复这类原生组件异常。清理项目缓存
删除项目的obj、bin目录及临时生成的Cabinet文件,重新构建。损坏的缓存文件可能导致压缩时出现句柄错误。提升构建权限
以管理员身份运行构建工具(如Visual Studio、msbuild命令),避免UAC权限限制。同时检查系统临时目录(%TEMP%)是否有足够空间,且当前用户具备读写权限——Wix压缩过程会依赖临时目录存储中间文件。排除特殊文件
若打包文件包含超大文件(超过2GB)、非常规格式或损坏文件,尝试逐个移除后重新构建,定位是否为特定文件导致的问题。超大文件可单独处理或拆分后打包。
内容的提问来源于stack exchange,提问作者Nikhil Pisharody
相关产品推荐
相关产品推荐

