Ich bin in das klassische Szenario, wo, beim Erstellen von Word-COM-Objekten in .NET (über das Microsoft.Office.Interop.Word Assembly) wird der WinWord-Prozess nicht beendet, obwohl ich properly closing and releasing the objects bin.WinWord.exe wird nicht beendet nach dem Aufrufen von Word.Documents.Add - Word .NET Interop
Ich habe es auf die Verwendung der Word.Documents.Add() -Methode eingeschränkt. Ich kann problemlos mit Word arbeiten (Öffnen von Dokumenten, Ändern von Inhalten usw.) und WinWord.exe wird beendet, wenn ich es sage. Es ist einmal ich benutze die Add() -Methode (und nur beim Hinzufügen einer Vorlage), dass der Prozess ausgeführt wird.
Hier ist ein einfaches Beispiel, das das Problem reproduziert:
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()
Wie Sie mir das Erstellen und Anordnen der Objekte richtig den zusätzlichen Schritt zu Schleife Marsha.ReleaseComObject, auch sehen können, nehmen, bis sie die richtige zurück Code. Das Arbeiten mit den Word-Objekten ist in anderer Hinsicht in Ordnung, es ist nur das nervtötende Documents.Add, das mir Kummer bereitet. Wird in diesem Prozess ein anderes Objekt erstellt, das ich referenzieren und entsorgen muss? Gibt es noch einen weiteren Entsorgungsschritt, dem ich folgen muss? Etwas anderes? Ihre Hilfe wird sehr geschätzt :)
Update:
Ich habe versucht GC.Collect am Ende der Entsorgung Schritt aber immer noch kein Glück.
Update 2:
Ich habe das Problem auf die Verwendung von benutzerdefinierten Vorlagen eingegrenzt. Beim Aufrufen von Documents.Add (...) gebe ich eine benutzerdefinierte Vorlage für das neue Dokument an. Wenn ich dies nicht mache und stattdessen Add() ohne Parameter aufruft, passiert das Problem nicht.
Dies könnte auch ein Problem mit einer benutzerdefinierten Vorlage sein. Funktioniert es, wenn Sie einfach 'oWord.Documents.Add()' aufrufen? –
Danke, super Vorschlag! Es funktioniert, wenn ich nur Addiere, so ist es die benutzerdefinierte Vorlage, die das Problem irgendwie verursacht. Ich werde weiter graben. – Keith
Wenn es dann ist, dann wird vielleicht Jim Leonardo Lösung helfen. Lass es Word zeigen, was es tut, vielleicht wartet eine Dialogbox oder etwas darauf. – MadBoy