2012-03-08 72 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