4

背景

我正在研究确定 WiX 是否是 InstallShield 的可行替代方案。所以我一直在测试我们工作所面临的每一个场景,以确保 WiX 可以处理它们。但是,我被一个问题难住了。当证书即将过期时,我们需要创建一个包含新证书的补丁,并在旧证书过期之前对其进行签名,以允许在没有管理员提升提示的情况下进行无缝补丁。

问题

在互联网上没有太多关于如何做到这一点的文档。我试过添加

<DigitalCertificate Id="MyNewCertificate" SourceFile="{PATH_TO_NEW_CERTIFICATE}"/>

到 wxs 文件中的 PatchCertificates 元素以生成 MSI 文件,然后使用新旧 MSI 文件生成 MSP 文件。当我用 7zip 打开 MSP 文件时,我可以看到新证书已嵌入其中。当我在一个锁定的帐户上测试它时,这个补丁是在没有提升提示的情况下应用的,但是下一个由新证书签名的补丁会显示提升提示。

我试过的

我尝试按照https://wyrdfish.wordpress.com/2012/07/20/writing-a-parallel-update/中的步骤创建“并行”更新,但进行修改以使其适用于 PatchCreation,而不是 Patch . 我匹配了所有的属性更改,但它仍然显示海拔提示。

Wyrdfish 评论说:“证书过期很有趣,因为您需要使用修补程序来交付由旧证书在过期之前签名的新证书,这样您就可以在未来的补丁中使用新证书签名。”在http: //windows-installer-xml-wix-toolset.687559.n2.nabble.com/Require-admin-rights-to-msp-td7586837.html,但没有提供有关如何执行此操作的详细信息。该线程已有两年历史,所以我非常怀疑我会在那里得到回应。

我还尝试使用新证书在 signtool.exe 中提供 /ac 参数,但出现交叉签名错误。

我到底做错了什么?在新的 MSI 文件中,没有其他变化,只有新的 DigitalCertificate 元素,它反映在 MSP 中。我是否需要包含某种文件更改或其他内容?还是签名过程有问题?

4

1 回答 1

1

发现我的补丁有问题。对于遇到类似问题的任何人,您需要在 PatchCreation 的 PatchSequence 元素中指定 ProductCode,它与用于构建 MSI 的产品 ID 的 GUID 相同。我没有这个参考,这显然引起了问题。现在它不会提升管理员。将此与相关链接中指示的步骤结合起来,您就可以进行 LUA 修补了。

于 2015-07-17T18:49:18.110 回答