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

Tom*_*tom 5 c# excel digital-signature

在互联网上搜索了一段时间后,没有成功,我会在这里询问。

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

我的目标是打开Excel文档,并假设存在宏,将数字签名应用于该文档的vba-macros。

我有以下代码来检测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;
Run Code Online (Sandbox Code Playgroud)

那很好。

现在,我获取要用于签署宏的证书:

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];
}
Run Code Online (Sandbox Code Playgroud)

现在我不知道如何继续...

我试过了:

VBE vbe = application.VBE;
VBProject vbProject = vbe.VBProjects.Item(1);
Run Code Online (Sandbox Code Playgroud)

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

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

Rig*_*oni 1

它不是 C#,但有一种方法可以使用 MS 命令行工具在 Excel 文件中签署 VBA 代码。我从 C# 程序调用相关命令。已解决的问题:是否可以签署包含时间戳的 Excel VBA 项目?