【问题标题】:How can you tell programmatically if a Word Macro is signed from VB.Net/C#如何以编程方式判断 Word 宏是否是从 VB.Net/C# 签名的
【发布时间】:2012-03-08 03:17:57
【问题描述】:

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

  1. 创建一个 RTF 文档
  2. 在 Microsoft Word 中打开它
  3. 使用如下代码运行 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

多年来一直很顺利。

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

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

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

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

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

With mobjWordApp.Dialogs.Item(Word.WdWordDialog.wdDialogToolsMacro)
    .Name = MacroName
    .Run = True
    .Execute()
End With

我需要知道的是:

有没有办法让我的代码在我运行宏之前识别它是否已签名(并且受信任)?

【问题讨论】:

  • 什么版本的word文档? doc还是docx?
  • G'day Micah,我们正在运行带有 .dotm 和 .doc 文件的 Word 2007(32 位)

标签: .net vb.net vba ms-word


【解决方案1】:
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

MSDN Link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多