问题描述:

项目中使用Wix burn打包,内部包含了多个MSI。有时候会遇到如下错误

Error 0x80091007: Failed to verify hash of payload: SetupProject1.msi 。

问题解析:

首先需要了解Wix Brun校验其payload的原理,主要有如下两种情况:

1)如果MSI有数字签名,则根据MSI的数字签名进行校验,也就是说如果数字签名没有变,Burn不会校验MSI的内容是否变化

2)如果MSI无数字签名,则获取该MSI的SHA1 hash,在安装的时候校验hash。这种情况下,如果MSI的内容发生变化,则无法使用该burn进行安装,必须重新编译。

WIX Brun 源代码 (burn\engine\cache.cpp)

static HRESULT VerifyThenTransferPayload(
__in BURN_PAYLOAD* pPayload,
__in_z LPCWSTR wzCachedPath,
__in_z LPCWSTR wzUnverifiedPayloadPath,
__in BOOL fMove
)
{
。。。
// If the payload has a certificate root public key identifier provided, verify the certificate.
if (pPayload->pbCertificateRootPublicKeyIdentifier)
{
hr = CacheVerifyPayloadSignature(pPayload, wzUnverifiedPayloadPath, hFile);
ExitOnFailure1(hr, "Failed to verify payload signature: %ls", wzCachedPath);
}
else if (pPayload->pCatalog) // If catalog files are specified, attempt to verify the file with a catalog file
{
hr = VerifyPayloadWithCatalog(pPayload, wzUnverifiedPayloadPath, hFile);
ExitOnFailure1(hr, "Failed to verify payload signature: %ls", wzCachedPath);
}
else if (pPayload->pbHash) // the payload should have a hash we can use to verify it.
{
hr = VerifyHash(pPayload->pbHash, pPayload->cbHash, wzUnverifiedPayloadPath, hFile);
ExitOnFailure1(hr, "Failed to verify payload hash: %ls", wzCachedPath);
}
。。。
}

解决方法:

了解了问题的原理,方法就显而易见了。

[每天解决一问题系列 - 0005] WiX Burn 如何校验chained package的合法性的更多相关文章

  1. Wix Burn运行64位dism.exe的问题

    主要的问题是Burn是一个32位程序,在64位机器上它启动的进程都会被重定向到wow64目录下,也就是说它运行的dism.exe最终会是32位的.解决的方法就是用wix提供的QtExec64CmdLi ...

  2. 解决Adobe cs6系列软件在Windows10操作系统中无法正常运行问题

    大家好,我是安德风,很高兴今天能给大家一起解决Adobe cs6系列软件在Windows10操作系统中无法正常运行的问题.今天我以Adobe Photoshop cs6在Windows10环境安装运行 ...

  3. [WPF 基础知识系列] —— 绑定中的数据校验Vaildation

    前言: 只要是有表单存在,那么就有可能有对数据的校验需求.如:判断是否为整数.判断电子邮件格式等等. WPF采用一种全新的方式 - Binding,来实现前台显示与后台数据进行交互,当然数据校验方式也 ...

  4. 解决Ubuntu14.04 下 E: Encountered a section with no Package: header 问题

    参考: ubuntu-E:Encountered a section with no Package: header的解决办法 解决Ubuntu14.04 下 E: Encountered a sec ...

  5. 【ABAP系列】SAP ABAP替代校验全解析

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP替代校验全解析 ...

  6. [每天解决一问题系列 - 0013] 如何修改WiX Burn内置的窗口

    问题描述: 我们产品的burn安装包仅支持.net 3.5 sp1以上,在只有.net 2.0的机器上会给用户弹一个窗口,告诉用户为什么不能够安装的原因.本来burn已经内置了,但是在日文操作系统下, ...

  7. [每天解决一问题系列 - 0012] 如何通过程序获取IIS站点信息

    问题描述: 在WiX中需要判断某个站点是否存在,WiX没有这个能力,该怎么做呢? 解决方案: 解决方法就是写一个Custom Action来检测,实现的途径也有很多,现在想到了这么几个 1)Power ...

  8. Wix Burn:如何将32位和64位的安装包制作成一个安装包

    由于Windows Installer不是平台独立的(即区分32-bit和64-bit),因此用Wix制作的安装包在编译不能像.net应用那样采用Any CPU编译,而必须制定是目标Platform是 ...

  9. [每天解决一问题系列 - 0008] 关于.net framework 路径最大长度的问题

    问题描述: 有时候,在copy文件的时候,会提示目录长度太大,无法copy 解决方法: 可以使用Long Path Tool 解决问题 相关解释: http://blogs.msdn.com/b/bc ...

随机推荐

  1. $nextTick 的作用

    文档:深入响应式原理 Vue 实现响应式并不是数据发生变化之后 DOM 立即变化,而是按一定的策略进行 DOM 的更新. $nextTick 是在下次 DOM 更新循环结束之后执行延迟回调,在修改数据 ...

  2. python中tolist()命令

  3. android 个人使用总结

    android 中button控件去除阴影背景 style="?android:attr/borderlessButtonStyle" android  中输入账号和密码是做判断处 ...

  4. 项目总结18-使用textarea无法判断空值之坑

    项目总结18-使用textarea无法判断空值之坑 今天使用js判断textarea为空,发现怎么都无法成功仔细做了对比测试,发现结果如下: 1-JS代码 if($("#content&qu ...

  5. Jstack定位CPU使用最多的线程及代码

    jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多.下面我们来一个实例找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有 ...

  6. 哪些人才适合转行学习UI设计?

    最近有很多学员问,怎么才知道自己适不适合学习UI设计,在从事IT教育行业多年以来,也确实碰到好多人咨询这个问题,今天就和大家说下,哪些人才适合转行学习UI设计?(转行必看) 1 平面设计师.网页设计师 ...

  7. predict predict_proba区别的小例子

    predict_proba返回的是一个n行k列的数组,第i行第j列上的数值是模型预测第i个预测样本的标签为j的概率.所以每一行的和应该等于1. 举个例子 >>> from sklea ...

  8. 初识XMind基本操作

    花了一些时间来学习了XMind,梳理了一下学习基础部分的内容,分为输入文字,添加分支,超级链接或附件,以及美化操作四个部分.

  9. 《Linux就该这么学》第四天课程

     秦时明月经典语录: 侠道:五步之内,百人不当.十年磨剑,一孤侠道——荆轲 我发了一些课堂笔记,供你们参考 原创地址:https://www.linuxprobe.com/chapter-03.htm ...

  10. UVa 11728 Alternate Task (枚举)

    题意:给定一个 n,求一个最大正整数 N 使得 N 的所有正因数和等于 n. 析:对于任何数一个 n,它的所有正因子都是大于等于本身的,因为 n 本身就是自己的正因数,这样的就可以直接暴力了,答案肯定 ...