如何通过编程判断Word宏是否是从VB.Net/C签名的#

如何通过编程判断Word宏是否是从VB.Net/C签名的#,.net,vb.net,vba,ms-word,.net,Vb.net,Vba,Ms Word,我有一个VB.Net/C#应用程序,它以编程方式: 创建RTF文档 在Microsoft Word中打开它 使用以下代码运行Word模板中存在的Word宏: 代码: Protected mobjWordApp As Word.Application = Nothing ' ' lots more code snipped for clarity ' With mobjWordApp.Dialogs.Item(Word.WdWordDialog.wdDialogToolsMacro) .N

我有一个VB.Net/C#应用程序,它以编程方式:

  • 创建RTF文档
  • 在Microsoft Word中打开它
  • 使用以下代码运行Word模板中存在的Word宏:
  • 代码:

    Protected mobjWordApp As Word.Application = Nothing
    '
    ' lots more code snipped for clarity
    '
    With mobjWordApp.Dialogs.Item(Word.WdWordDialog.wdDialogToolsMacro)
        .Name = MacroName
        .Run = True
        .Execute()
    End With
    
    多年来,这一做法一直运作良好

    我现在有一个新的要求;我的应用程序只需要运行有符号的Word宏

    这在Word用户界面中很容易做到,如下所示:

    File > Options > Trust center > Macro Settings
    Select "Disable all macros except digitally signed macros"
    

    设置后,如果运行Word的人员显示“宏”对话框,则不会列出任何未签名(或已签名但不受信任)的宏。这正是我所期望的

    然而,我的VB.Net代码,它是打开Word应用程序可以绕过这一点。当我运行此代码时,它将运行一个未签名的宏:

    With mobjWordApp.Dialogs.Item(Word.WdWordDialog.wdDialogToolsMacro)
        .Name = MacroName
        .Run = True
        .Execute()
    End With
    
    我需要知道的是:

    在运行宏之前,我的代码是否有办法确定宏是否已签名(和受信任)

    Dim ap As New Application()
    Dim doc As Document = ap.Documents.Open("C:\Doc1.rtf", [ReadOnly] := False, Visible :=        False)
    doc.Activate()
    'returns a boolean on if the VBA is signed 
    doc.VBASigned
    

    word文档的哪个版本?doc还是docx?G'day Micah,我们正在使用.dotm和.doc文件运行Word 2007(32位)