Excelmacros的数字签名

在我们的项目中,我们有一个Excel模板(.xlt)和一个加载项文件(.xla)。 这些文件用于创build一个数据视图。 Dataview只不过是一种报告。 xla包含创build,删除,pipe理数据视图及其内容的控件的代码。 这些控件是在VC ++中创build的用于创build数据视图的OCX控件。 我们分别有加载项代码和模板文件。

xlt和xla进行了数字签名,以确保代码防篡改。 一切正常,直到数字签名进入图片。 dataview是通过打开模板文件(.xlt)并将文件保存为.xls扩展名而创build的,因此不会更改数字签名的xlt和xla文件。 当我们试图保存这个信息时,我们会得到如下的信息:“你正试图修改已签名的项目,你没有正确的密钥来签署项目….”

当我们给保存更改并丢弃签名时 ,只有生成的新文件才会丢失签名。 xlt和xla的签名保持不变。

我们也尝试手动编辑excel中的单元格并保存,但是我们没有得到这个消息。 只有在使用OCX控件创build数据视图并保存popup窗口上面的消息后。

你想保护什么? 您是否签署了整个工作簿/模板,还是仅签署了代码?

.xls是.xlt的副本,所以模板签名也被复制到xls。 思路:

  1. 尝试仅签署模板中的代码。 在IDE中,使用工具 – >数字签名(Excel 2002/2003)
  2. 删除模板中的所有代码,并将其放入添加中
  3. 如果这太难了,只需使用模板中的代码即可添加

我也有类似的问题。 我发现只有当我的macros插入或删除工作表到工作簿时才发生。 事实certificate,因为每个工作表都有特定于该工作表的macros,所以添加或删除工作表可以有效地修改macros源代码。

感谢Turbo Law的Keith Survey,让我指出了这个问题的正确方向:

http://help.turbolaw.com/entries/362246-warning-message-you-have-modified-a-signed-project-you-do-not-have-the-right-key-to-sign-this-工程中的

我一直无法find解释此问题的权威微软源代码。