Wix Installer出现Hash mismatch错误,请求排查故障原因
报错日志
e000: 错误0x80091007: 路径哈希不匹配:C:\ProgramData\Package Cache{0120503F-72AF-4880-B381-B9F1418EB786}v1.0.0.0\IISInstallation,预期值:8AA50D1AA48711BDAF934D5DAD6674FD56670F79,实际值:35A87DA0B621B40181ECD2A1CCBDAA8B9C660102
[5544:4D70][2024-12-17T02:01:09]e000: 错误0x80091007: 验证负载IISWebServerRole的哈希失败
[5544:4D70][2024-12-17T02:01:09]e310: 在路径C:\ProgramData\Package Cache{0120503F-72AF-4880-B381-B9F1418EB786}v1.0.0.0\IISInstallation验证负载IISWebServerRole失败,错误:0x80091007。正在删除文件。
[5544:4D70][2024-12-17T02:01:09]e000: 错误0x80070002: 在工作路径C:\Windows\Temp{E17C1111-28D5-427F-AF65-6690961B0ACB}\IISWebServerRole和未验证路径C:\ProgramData\Package Cache.unverified\IISWebServerRole中未找到负载IISWebServerRole
[5544:4D70][2024-12-17T02:01:09]e000: 错误0x80070002: 缓存负载IISWebServerRole失败
[0E30:19C0][2024-12-17T02:01:09]e314: 从工作路径C:\Windows\Temp{E17C1111-28D5-427F-AF65-6690961B0ACB}\IISWebServerRole缓存负载IISWebServerRole失败,错误:0x80070002。
[0E30:19C0][2024-12-17T02:01:09]e349: 应用程序请求重试负载IISWebServerRole,遇到错误:0x80070002。正在重试...
关联的Bundle代码片段
<Chain> <MsiPackage Id="IISWebServerRole" Name="IISInstallation" ForcePerMachine="yes" SourceFile="IISFeature\bin\x64\Release\IISFeature.msi" Visible="no" LogPathVariable="LogIISWebServerRole" DisplayInternalUI="no" Vital="no" Permanent="yes"> <MsiProperty Name="INSTALLFOLDER" Value="[InstallFolder]" /> </MsiPackage> <ExePackage Id="DotNetSDK6" PerMachine="yes" SourceFile="prerequisite\dotnet-sdk-6.0.401-win-x64.exe" RepairCommand="/quiet /repair /norestart" InstallCommand="/quiet /norestart" Vital="no" Permanent="yes" LogPathVariable="LogDotNetSDK6Bundle"></ExePackage> <ExePackage Id="DotNetCoreHostingBundle" PerMachine="yes" SourceFile="dotnet8\dotnet-hosting-8.0.10-win.exe" RepairCommand="/quiet /repair /norestart" InstallCommand="/quiet /norestart" Vital="no" Permanent="yes" LogPathVariable="LogDotNetCoreHostingBundle"></ExePackage> <ExePackage Id="DotNet8Runtime" PerMachine="yes" SourceFile="prerequisite\dotnet-runtime-8.0.8-win-x86.exe" RepairCommand="/quiet /repair" DetectCondition="(Dotnet8RuntimeFound ~= "True")" InstallCommand="/quiet /restart" Vital="no" Permanent="yes" LogPathVariable="LogDotNet8Runtime"></ExePackage> <ExePackage Id="WindowsDesktopDotNet8Runtime" PerMachine="yes" SourceFile="dotnet8\windowsdesktop-runtime-8.0.10-win-x64.exe" RepairCommand="/quiet /repair" DetectCondition="(WindowsDesktopDotNet8RuntimeFound ~= "True")" InstallCommand="/quiet /restart" Vital="no" Permanent="yes" LogPathVariable="LogWindowsDesktopDotNet8Runtime"></ExePackage> ... </Chain>
可能的故障原因
- 安装包文件损坏:
IISFeature.msi在打包、存储或传输过程中损坏,导致实际哈希值与Wix Bundle编译时记录的预期哈希不符。 - 缓存目录残留冲突:
C:\ProgramData\Package Cache中残留了旧版本的IISInstallation文件,新版本安装时校验哈希与旧文件冲突,验证失败后旧文件被删除,后续找不到有效负载文件。 - 临时目录异常:Windows临时目录
C:\Windows\Temp权限不足,导致安装程序无法写入/读取IISWebServerRole负载文件;或临时文件被杀毒软件、系统清理工具提前删除。 - 编译与分发文件不一致:编译Wix Bundle时,指定路径下的
IISFeature.msi与最终分发的安装包内文件不是同一版本,编译时记录的哈希值和实际运行时文件哈希不匹配。 - 安全软件干扰:Windows Defender或第三方杀毒软件扫描、修改了
Package Cache目录下的文件,导致文件哈希值被篡改。
内容的提问来源于stack exchange,提问作者Adriano Santros

