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

时间:2017-07-24 12:01:46

标签: wix

道歉,但我的Google-fu让我失望,我所能找到的只是ASP.Net RC1的安装程序有这个问题而且这个含糊不清:Burn installer facing error .Net 45 0x80091007-The hash value is not correct

我的捆绑包工作正常,除了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

根据我在Google上发现的内容,我的理解是,在构建捆绑包时会生成哈希值。然后,当执行bundle时,会生成一个新的哈希值,并对两者进行比较,以确保该bundle未被篡改。这一切都非常有意义,但是在我的捆绑包中测试失败的三个文件在构建捆绑包后不会被更改。 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>

此时我对可能造成这种情况的原因感到茫然,并且非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

如果其他人有类似的问题,这是由于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'/>