[每天解决一问题系列 - 0005] WiX Burn 如何校验chained package的合法性
问题描述:
项目中使用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的合法性的更多相关文章
- Wix Burn运行64位dism.exe的问题
主要的问题是Burn是一个32位程序,在64位机器上它启动的进程都会被重定向到wow64目录下,也就是说它运行的dism.exe最终会是32位的.解决的方法就是用wix提供的QtExec64CmdLi ...
- 解决Adobe cs6系列软件在Windows10操作系统中无法正常运行问题
大家好,我是安德风,很高兴今天能给大家一起解决Adobe cs6系列软件在Windows10操作系统中无法正常运行的问题.今天我以Adobe Photoshop cs6在Windows10环境安装运行 ...
- [WPF 基础知识系列] —— 绑定中的数据校验Vaildation
前言: 只要是有表单存在,那么就有可能有对数据的校验需求.如:判断是否为整数.判断电子邮件格式等等. WPF采用一种全新的方式 - Binding,来实现前台显示与后台数据进行交互,当然数据校验方式也 ...
- 解决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 ...
- 【ABAP系列】SAP ABAP替代校验全解析
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP替代校验全解析 ...
- [每天解决一问题系列 - 0013] 如何修改WiX Burn内置的窗口
问题描述: 我们产品的burn安装包仅支持.net 3.5 sp1以上,在只有.net 2.0的机器上会给用户弹一个窗口,告诉用户为什么不能够安装的原因.本来burn已经内置了,但是在日文操作系统下, ...
- [每天解决一问题系列 - 0012] 如何通过程序获取IIS站点信息
问题描述: 在WiX中需要判断某个站点是否存在,WiX没有这个能力,该怎么做呢? 解决方案: 解决方法就是写一个Custom Action来检测,实现的途径也有很多,现在想到了这么几个 1)Power ...
- Wix Burn:如何将32位和64位的安装包制作成一个安装包
由于Windows Installer不是平台独立的(即区分32-bit和64-bit),因此用Wix制作的安装包在编译不能像.net应用那样采用Any CPU编译,而必须制定是目标Platform是 ...
- [每天解决一问题系列 - 0008] 关于.net framework 路径最大长度的问题
问题描述: 有时候,在copy文件的时候,会提示目录长度太大,无法copy 解决方法: 可以使用Long Path Tool 解决问题 相关解释: http://blogs.msdn.com/b/bc ...
随机推荐
- D. Kilani and the Game(多源BFS)
题目来源:http://codeforces.com/contest/1105/problem/D 题意:编号为1-k的点在一张n*m的表格中依次扩散,每个结点有各自的扩散速度且只可以往上下左右四个方 ...
- 545. Boundary of Binary Tree二叉树的边界
[抄题]: Given a binary tree, return the values of its boundary in anti-clockwise direction starting fr ...
- includes() 方法
字符串的includes()和数组中的includes()判断有没有括号里面的值,有的话为true,没有为false. 详细解析:https://blog.csdn.net/wu_xianqiang/ ...
- [leetcode]31. Next Permutation下一个排列
Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...
- echo 转义字符的使用
man echo 查看 echo 的使用文档 -n 不尾随换行符 -e 启用解释反斜杠的转义功能 -E 禁用解释反斜杠的转义功能(默认) --help 显示此帮助信息并退出 --version 显示版 ...
- Vc 检测内存泄漏
启用内存泄漏检测 检测内存泄漏是 C/c + + 调试器和 C 运行时库 (CRT) 的主要工具调试堆函数. 若要启用调试堆的所有函数,在 c + + 程序中,按以下顺序包含以下语句: C++复制 # ...
- JavaSE 初学进度条JProgressBar
预备知识 创建进度条类后将其直接加入JFrame看看效果 public class JProgressBarDemo2 { public static void main(String args[]) ...
- 关于esp32的省电模式的WiFi连接
对于ESP32,其作为一款集成了2.4GHz WiFi和蓝牙双模块的单芯片,所有基于wifi和蓝牙开发是学习esp32的重要一环,今天WiFi原理和网络结构 可以点击链接进行详细的了解,这里就不做详细 ...
- codeforces 1042 e
逆推期望 #include<bits/stdc++.h> using namespace std; #define ll long long #define pb(x) push_back ...
- unigui结合JS方法记录
在js中界面上所有组件都当成html里来控制 .控制按钮事件 document.getElementById(MainForm.UniButton4.getId()).click(); 这个方法让J ...