在MSI中解压缩,修改和重新打包文件?

时间:2010-10-26 14:33:03

标签: file windows-installer updating

我正试图找出在我的一个项目中使用Authenticode签署二进制文件的最简单,最安全的方法。

我能看到的最简单的方法是获取编译结果 - 一个包含所有二进制文件的完整安装包 - 从中​​提取程序集,签名,然后在MSI中重新打包这些签名的程序集,然后得到签名。

有很多关于从MSI解压缩文件的信息,但没有关于重新打包它们的信息。我该怎么做?

2 个答案:

答案 0 :(得分:1)

编辑原始回复......

如果要将登录嵌入到无人参与的构建过程中,可以使用MSBuild SignFile任务,该任务包装authenticode签名API http://msdn.microsoft.com/en-us/library/ms164304.aspx

或者只使用对SignTool.exe的调用。

您需要使用certmgr.exe或证书mmc snapin将软件发布证书安装到计算机上。一旦将其安装到本地证书存储区中,您只需使用SHA指纹引用它,您可以在证书属性上找到它,或者只在certmgr.exe中列出证书。

我们必须定期更新我们的证书,以便我们在构建中有额外的步骤,以便在构建开始时在本地重新导入证书,并提取证书哈希。我建议不要在源控件中存储哈希,以防你必须返回并构建一个旧版本 - 它应该是你的环境配置的一部分,例如一个env var或其他可以与源代码分离的东西。

此外,不要忘记为签名文件添加时间戳,以便保证签名的有效性。我还建议你将签名与时间戳分开。时间戳是一种偶尔会出错的网络操作,因此能够区分签名失败和时间戳失败是有用的,因为时间戳失败只是可能公开发布的黄金版本的问题。

答案 1 :(得分:1)

你没有陈述你的构建系统是什么,但是我的项目经历的(过度简化的)流程如下(我使用几乎所有东西的任务,从CruiseControl.net触发)

  1. 从源代码管理中获取所有内容
  2. 构建清洁项目
  3. 抓取未签名的文件
  4. 使用signtool.exe签署所有相关文件(例如exe,dll,ocx)
  5. 构建MSI(使用WiX)
  6. 在MSI上执行一些自定义的构建后任务
  7. 数字签署MSI
  8. (取决于构建参数)使用引导程序压缩MSI
  9. 签署引导程序
  10. 上传到临时区域
  11. 构建的电子邮件Dev + QA团队已准备好进行测试。
  12. 如果它在任何地方失败,那么只需发送电子邮件给开发团队。

    您应该能够使用MSBuild,Nant或其他各种工具执行此操作。它可能涉及到一些地方的自定义工作,但最终结果是一个可靠的构建系统,需要人与构建的交互(除非有人想'强制'构建,即使是只需点击网页上的按钮或其他内容)