Удаление Microsoft.Office.Interop.Word.Application

(В некотором роде продолжение сообщения (которое остается без ответа): https://stackoverflow.com/q/6197829/314661 )

Использование следующий код

Application app = new Application();
_Document doc = app.Documents.Open("myDocPath.docx", false, false, false);
doc.PrintOut(false);
doc.Close();

Я пытаюсь открыть и распечатать файл программно.

Проблема в том, что каждый раз, когда я запускаю вышеуказанный код, запускается новый процесс WINWORD.exe, который, очевидно, быстро съедает всю память.

Класс приложения, похоже, не содержит метода dispose / close или аналогичного.

После небольшого исследования я (понял) и изменил код на следующий.

 Application app = new Application();
 _Document doc = app.Documents.Open(fullFilePath + ".doc", false, false, false);
 doc.PrintOut(false);
 doc.Close();
 int res = System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
 int res1 = System.Runtime.InteropServices.Marshal.ReleaseComObject(app);

И я вижу, что оставшееся количество ссылок равно ноль но процессы остаются?

PS: Я использую версию 14 библиотеки Microsoft.Office.Interop.

37
задан Community 23 May 2017 в 10:30
поделиться

1 ответ

Согласованный с другими плакатами, что GC.Collect() и Marshal.ReleaseComObject() не нужно. Если процесс все еще существует после выполнения app.Quit(false), это могло бы быть, потому что Вы запускаете невидимое приложение, и существует подсказка, которая препятствует тому, чтобы приложение закрылось, такие как диалоговое окно Восстановления Документа. Если это так, необходимо добавить это при создавании приложения.

app.DisplayAlerts = false;
0
ответ дан 27 November 2019 в 04:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: