Как вы можете программно определить, подписан ли макрос Word из VB.Net/C#

у меня есть 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

это работает счастливо в течение многих лет.

Теперь у меня есть новое требование; мое приложение требуется только для запуска макросов со знаком Word.

Это достаточно легко сделать в пользовательском интерфейсе Word следующим образом:

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

Trust Center

как только это установлено, если человек, выполняющий Word, отображает диалоговое окно макросов, любые неподписанные (или подписанные, но ненадежные) макросы не перечислены. Все так, как я и ожидал.

однако, мой VB.Net код, который открывает приложение Word, может обойти это. Когда я запускаю этот код, он запускает макрос без знака:

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

что мне нужно знать это:

есть ли способ для меня код, чтобы определить, подписан ли макрос (и доверенный) перед его запуском?

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