c# - 使用 C# 将数字签名应用于 office-vba-macros

标签 c# excel digital-signature

在网上搜索了一段时间没有成功,我在这里问一下。

互联网上的一些帖子说不可能将数字签名应用于 Excel 应用程序中的 VBA 宏。但是我找到的所有文章都很旧,所以我希望现在可以通过代码来完成此操作。

我的目标是打开一个 Excel 文档并对 vba 宏应用数字签名,假设存在宏。

我有以下代码来检测excel文档中是否有VBMacros:

string filePath = @"E:\OfficeDocuments\Sample1.xlsm";
object isReadonly = true;
object missing = Missing.Value;
_Application application = new Microsoft.Office.Interop.Excel.Application();
workbook = application.Workbooks.Open(
                    filePath, missing, isReadonly, missing, missing, missing,
                    missing, missing, missing, missing, missing, missing,
                    missing, missing, missing);
bool workbookHasVbProject = workbook.HasVBProject;

这很好用。

现在我获取要用于对宏进行签名的证书:

X509Store store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection x509Certificate2Collection = store.Certificates;
X509Certificate2Collection certificate2Collection = x509Certificate2Collection.Find(X509FindType.FindBySubjectName, "MyCertificate 01", true);
if (certificate2Collection.Count > 0)
{
   X509Certificate2 certificate = certificate2Collection[0];
}

现在我不知道如何继续。

我试过:

VBE vbe = application.VBE;
VBProject vbProject = vbe.VBProjects.Item(1);

但我看不到任何签署宏的机会。

真的没有办法用 C# 代码对宏进行签名吗?

最佳答案

它不是 C#,但有一种方法可以使用 MS 命令行工具在 Excel 文件中签署 VBA 代码。我从我的 C# 程序调用相关命令。已解决的问题:Is it possible to sign a Excel VBA project including timestamp?

关于c# - 使用 C# 将数字签名应用于 office-vba-macros,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53205207/

相关文章:

C# - 使用表单而不是消息框

c# - FakeItEasy - 是否可以拦截一个方法并将其替换为我自己的实现?

c# - 如何取消 FileStream.ReadAsync( ... ) 请求?

VBA - 在继续执行下一个子之前等待一段时间

security - 企业 PKI 部署(数字签名)

c# - 进行 AES 加密 CBC

c# - 使用 oledb 命令从 excel 中读取

excel - 为什么 SendKey Enter 不能与 Chrome 浏览器一起使用

java - iText7 LtvVerification.addVerification 未启用 LTV

c# - 仅使用公钥验证签名 (C#)