2012-03-08 67 views
7

签署我有一个VB.Net/C#应用程序编程:你怎么知道编程如果Word宏从VB.Net/C#

  1. 创建一个RTF文档
  2. 打开它在微软字
  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 Macros。

这是很容易在Word用户界面做的,具体如下:

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

Trust Center

一旦设置,如果运行Word的人显示宏对话框,任何未签名(或未签名但未受信任的)宏未列出。这完全如我所料。

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

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

我需要知道的是:

是否有我的代码,以确定如果宏我之前签署(和信任)的方式运行?

+0

什么版本的Word文档吗? doc或docx? – 2012-03-15 23:43:57

+0

G'day Micah,我们使用.dotm和.doc文件运行Word 2007(32位) – 2012-03-15 23:46:21

回答

4
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