Wix自定义绑定错误0x80091007:路径的哈希不匹配:
很抱歉,我的Google fu让我失望了,我所能找到的只是ASP.Net RC1的安装程序有这个问题,并且这个问题与我的Google fu有模糊的关联: 我的捆绑包工作正常,除了exepackage的某些依赖项在解包时抛出错误:Wix自定义绑定错误0x80091007:路径的哈希不匹配:,wix,Wix,很抱歉,我的Google fu让我失望了,我所能找到的只是ASP.Net RC1的安装程序有这个问题,并且这个问题与我的Google fu有模糊的关联: 我的捆绑包工作正常,除了exepackage的某些依赖项在解包时抛出错误: [16EC:1320][2017-07-24T11:33:25]e000: Error 0x80091007: Hash mismatch for path: C:\ProgramData\Package Cache\65D4FC25E4F02CCC325917AE7E
[16EC:1320][2017-07-24T11:33:25]e000: Error 0x80091007: Hash mismatch for path: C:\ProgramData\Package Cache\65D4FC25E4F02CCC325917AE7EA5987BA52497DA\MOMCertImport.exe, expected: 06BD98583C73B9D97A54472EDF0A00D590024A67, actual: 87FD653C06C4D638C83182FD43AD37E83C757492
[16EC:1320][2017-07-24T11:33:25]e000: Error 0x80091007: Failed to verify hash of payload: pay2F6419EC3C4EF736B4C9257552A6C584
从我在谷歌上发现的情况来看,我的理解是,当构建包时,会生成一个散列值。然后,当执行捆绑包时,将生成一个新的哈希值,并对两者进行比较,以确保捆绑包未被篡改。这一切都很有道理,但是在我的包中,三个未通过测试的文件在包构建后不会被更改。exepackage和payload文件的声明如下:
<ExePackage Id="PowerONPulseConfigProd"
Cache="yes"
Compressed="yes"
InstallCommand='-ai -o certificate -c "[CompanyName]"'
InstallCondition='ProductChoice = pulse AND DeployEnv = prod'
UninstallCommand='-ai -o unistall -u [Username] -p [Password]'
After='PowerONPulse'
SourceFile='Resources\Prod.Pulse\SetupAgentB.exe'>
<Payload Compressed='yes' SourceFile='Resources\Prod.Pulse\SCA\SCOM2012\x64\MOMCertImport.exe'/>
我最好的猜测是,这些文件(一个exe和两个DLL)可能有问题,因为其余的有效负载文件工作正常,或者我签署捆绑包的方式有问题:
<Target Name="SignBundleEngine">
<Exec Command=""C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x86\signtool.exe" sign /f "PowerONCodeSigning.pfx" /p /t http://timestamp.digicert.com /v /d "%(SignBundleEngine.Filename)" "@(SignBundleEngine)"" />
</Target>
<Target Name="SignBundle">
<Exec Command=""C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x86\signtool.exe" sign /f "PowerONCodeSigning.pfx" /p /t http://timestamp.digicert.com /v /d "%(SignBundle.Filename)" "@(SignBundle)"" />
</Target>
<Target Name="SignMsi">
<Exec Command=""C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x86\signtool.exe" sign /f "PowerONCodeSigning.pfx" /p /t http://timestamp.digicert.com /v /d "%(SignMsi.Filename)" "@(SignMsi)"" />
</Target>
<Target Name="SignCabs">
<Exec Command=""C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x86\signtool.exe" sign /f "PowerONCodeSigning.pfx" /p /t http://timestamp.digicert.com /v /d "%(SignCabs.Filename)" "@(SignCabs)"" />
</Target>
在这一点上,我不知道是什么导致了这一点,我真的非常感谢任何帮助 如果其他人也有类似的问题,这是因为x86和x64有两个同名的依赖项(但在不同的源文件夹中)解包到同一个位置,并以错误的方式烧掉GUID造成的。修复方法是使用Name值为每个文件夹指定一个文件夹结构 有效负载文件现在声明如下:
<Payload Compressed='yes' SourceFile='Resources\Prod.Pulse\SCA\SCOM2012\x64\MOMCertImport.exe' Name='SCA\SCOM2012\x64\MOMCertImport.exe'/>
<Payload Compressed='yes' SourceFile='Resources\Prod.Pulse\SCA\SCOM2012\x86\MOMCertImport.exe' Name='SCA\SCOM2012\x86\MOMCertImport.exe'/>