С# MSOffice Interop Word не будет убивать winword.exe
Я пишу приложение, которому нужен парсер документов MSWord.
Я использую Microsoft.Office.Interop.Word.Document для извлечения текстов из документов, но даже если я использую документ doc.Close(), из taskManager я вижу, что winword.exe не убиты, и после разбора нескольких десятков документов он съедает много ресурсов.
close() неправильный метод?
пожалуйста, помогите мне и укажите мне правильное направление, как правильно закончить эти процессы. =)
~~~ ~~~ обновление
Спасибо за помощь. Я использую app.quit(), а также запускает цикл, который проверяет процесс и проблему. =)
Ответы
Ответ 1
Вы вызываете Application.Quit, так как вы делаете Interop, может оказаться целесообразным выпустить оболочка RCW.
Итак, в основном что-то вроде:
yourWordAppObject.Quit();
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(yourWordAppObject);
Обратите внимание, что некоторые люди используют: ReleaseComObject, но есть некоторые потенциал ловушки
Ответ 2
Вы должны выйти из экземпляра приложения, используя app.quit(). Document.close() просто закроет документ. Я также предлагаю установить app.visible = true, когда вы закончите обработку, чтобы ваш пользователь мог закрыть ее самостоятельно, если все остальное не работает.
Ответ 3
Если вы хотите завершить процесс, вам нужно вызвать Quit
объекта Application
- см. http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.applicationclass.quit%28v=office.14%29.aspx
Ответ 4
После выполнения app.Quit() вы должны сделать app = null; Из моего опыта это предотвратит зависание оставшихся процессов. Просто не забудьте сделать app.Quit() и app = null в вашем обработчике исключений.
Ответ 5
Я думаю, что близко просто обрабатывает документ, открытый внутри слова. Помните, что вы можете открыть более одного слова с 1 приложением. Возможно, вы захотите попробовать либо метод dispose, либо взглянуть на методы quit/exit для объектов word (не помните, что это было некоторое время).