2012-03-08 17 views
7

Tengo una aplicación que VB.Net/C# programación:¿Cómo puede saber programación si una macro de Word está firmado desde VB.Net/C#

  1. crea un documento RTF
  2. abrirlo en Microsoft palabra
  3. ejecuta una macro de Word que existe en el uso de código de plantilla de Word como esto:

código:

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 

Esto ha funcionado felizmente durante años.

Ahora tengo un nuevo requisito; Mi aplicación solo requiere ejecutar SIGNED Word Macros.

Esto es bastante fácil de hacer en la interfaz de usuario de Word, de la siguiente manera:

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

Trust Center

Una vez configurado, si la persona que ejecuta Word muestra el cuadro de diálogo Macros, cualquier signo (o las macros firmadas pero no son de confianza) no están en la lista. Esto es todo lo que esperaría.

Sin embargo, mi código VB.Net, que está abriendo la aplicación de Word puede omitir esto. Cuando ejecuto el código que se ejecuta una macro sin firmar:

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

Lo que necesito saber es:

¿Existe una manera para que mi código para identificar si se firma una macro (y de confianza) antes ¿ejecutarlo?

+0

¿Qué versión de documento de Word? doc o docx? –

+0

G'day Micah, estamos ejecutando Word 2007 (32 bits) con archivos .dotm y .doc –

Respuesta

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

Cuestiones relacionadas