2012-03-08 6 views
7

Ho un'applicazione VB.Net/C# che a livello di codice:Come si può dire a livello di codice se una macro di Word è firmato da VB.Net/C#

  1. crea un documento RTF
  2. aprirlo in Microsoft parola
  3. Esegue una macro di Word che esiste nel modello di Word utilizzando il codice in questo modo:

codice:

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 

Questo ha funzionato felicemente per anni.

Ora ho un nuovo requisito; La mia applicazione è necessaria per eseguire solo i macro di Word FIRMATI.

Questo è abbastanza facile da fare nell'interfaccia utente di Word, come segue:

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

Trust Center

Una volta che questo è impostato, se la persona che esegue Word visualizza la finestra di dialogo Macro, qualsiasi unsigned (o le macro firmate ma non attendibili) non sono elencate. Questo è tutto come mi aspetterei.

Tuttavia, il mio codice VB.Net, che sta aprendo l'applicazione di Word, può ignorarlo. Quando ho eseguito questo codice verrà eseguito una macro non firmata:

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

Che cosa ho bisogno di sapere è:

c'è un modo per il mio codice per identificare se una macro è firmato (e fidato) prima che io eseguirlo?

+0

Quale versione di word doc? doc o docx? –

+0

G'day Micah, stiamo eseguendo Word 2007 (32 bit) con i file .dotm e .doc –

risposta

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