Me estoy encontrando con el escenario clásico donde, al crear objetos Word COM en .NET (a través de Microsoft.Office.Interop.Word ensamblado), el proceso de WinWord no se cerrará a pesar de que estoy properly closing and releasing the objects.WinWord.exe no se cerrará después de llamar Word.Documents.Add - Word .NET Interop
Lo he reducido al uso del método Word.Documents.Add(). Puedo trabajar con Word de otras formas sin problemas (abrir documentos, modificar contenidos, etc.) y WinWord.exe se cierra cuando se lo digo. Una vez que uso el método Add() (y solo cuando agrego una plantilla ), el proceso se deja en ejecución.
Aquí está un ejemplo simple que reproduce el problema:
Dim word As New Word.Application()
word.Visible = False
Dim documents As Word.Documents = word.Documents
Dim doc As Word.Document = documents.Add(Template:=CObj(templatePath), NewTemplate:=False, DocumentType:=Word.WdNewDocumentType.wdNewBlankDocument, Visible:=False)
'' dispose objects
doc.Close()
While (Marshal.ReleaseComObject(doc) <> 0)
End While
doc = Nothing
While (Marshal.ReleaseComObject(documents) <> 0)
End While
documents = Nothing
word.Quit()
While (Marshal.ReleaseComObject(word) <> 0)
End While
word = Nothing
GC.Collect()
Como se puede ver que estoy creando y desechar los objetos correctamente, incluso teniendo un paso más para Marsha.ReleaseComObject bucle hasta que vuelve el buen código. Trabajar con los objetos de Word está bien en otros aspectos, es solo ese molesto Documents.Add que me está causando dolor. ¿Hay algún otro objeto que se cree en este proceso que necesite referenciar y eliminar? ¿Hay algún otro paso de eliminación que deba seguir? ¿Algo más? Su ayuda es muy apreciada :)
Update:
Intenté GC.Colgar al final del paso de eliminación, pero aún no tuve suerte.
Update 2:
Reduje el problema al uso de plantillas personalizadas. Cuando invoco Documents.Add (...) especifico una plantilla personalizada para el nuevo documento. Si no hago esto y en su lugar invoco Agregar() sin parámetros, entonces el problema no ocurre.
Esto podría ser un problema con una plantilla personalizada. ¿Funciona si simplemente llama a 'oWord.Documents.Add()'? –
¡Gracias, gran sugerencia! SÍ FUNCIONA si solo llamo Agregar, por lo que es la plantilla personalizada la que de alguna manera está causando el problema. Profundizaré más. – Keith
Si es así, quizás la solución de Jim Leonardo ayude. Haga que muestre Word lo que hace, tal vez algún cuadro de diálogo o algo esté esperando. – MadBoy