Wix自定义绑定错误0x80091007:路径的哈希不匹配:

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

很抱歉,我的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\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="&quot;C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x86\signtool.exe&quot; sign /f &quot;PowerONCodeSigning.pfx&quot; /p  /t http://timestamp.digicert.com /v /d &quot;%(SignBundleEngine.Filename)&quot; &quot;@(SignBundleEngine)&quot;" />
</Target>
<Target Name="SignBundle">
    <Exec Command="&quot;C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x86\signtool.exe&quot; sign /f &quot;PowerONCodeSigning.pfx&quot; /p  /t http://timestamp.digicert.com /v /d &quot;%(SignBundle.Filename)&quot; &quot;@(SignBundle)&quot;" />
</Target>
<Target Name="SignMsi">
    <Exec Command="&quot;C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x86\signtool.exe&quot; sign /f &quot;PowerONCodeSigning.pfx&quot; /p  /t http://timestamp.digicert.com /v /d &quot;%(SignMsi.Filename)&quot; &quot;@(SignMsi)&quot;" />
</Target>
<Target Name="SignCabs">
    <Exec Command="&quot;C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x86\signtool.exe&quot; sign /f &quot;PowerONCodeSigning.pfx&quot; /p /t http://timestamp.digicert.com /v /d &quot;%(SignCabs.Filename)&quot; &quot;@(SignCabs)&quot;" />
</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'/>