繁体   English   中英

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

[英]Apply digital signature to office-vba-macros with C#

在 inte.net 上搜索了一段时间但没有成功,我会在这里问。

inte.net 中的一些帖子说不可能将数字签名应用于 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# 程序中调用相关命令。 已解决的问题: 是否可以签署包含时间戳的 Excel VBA 项目?

要签署 VBA 宏,您可以在“工具”菜单和 select 数字签名中手动完成,或者在 VBA 代码中使用类似这样的代码。 创建一个模块并添加它

Sub SignMacros() Dim VBComp As VBComponent Set VBComp = ThisWorkbook.VBProject.VBComponents("Module1") VBComp.Sign "YourName", "YourCertificate" 结束子

将 Module1 更改为您希望签名的模块的名称,并对 YourName 和 YourCertificate 执行相同的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM