Файл Word заблокирован каждый раз, когда программа вылетает вручную - PullRequest
0 голосов
/ 29 октября 2018

Я читаю один файл слова для первого объекта слова, который создается, а затем файл слова открывается.

С какой проблемой я сталкиваюсь, когда файл открывается по объекту word, если после того, как эта программа вылетает или завершается диспетчером задач вручную, этот файл word блокируется и не может удалить этот файл. Для этого мне нужно убить процесс winword.exe из диспетчера задач, чтобы освободить этот процесс.

Мой код:

Word.Application word = new Word.Application();
......//Some code
                Microsoft.Office.Interop.Word.Document doc = word.Documents.Open(filename);
...//some code
try{
                doc.Save();
                ((Word._Document)doc).Close();
}
finally{
                   ((Word._Application)word).Quit(Word.WdSaveOptions.wdDoNotSaveChanges);
}

Если программа вылетает, то эта строка ((Word._Application) слово) .Quit (Word.WdSaveOptions.wdDoNotSaveChanges); не выполнено, вызывая блокировку файла.

Есть какое-нибудь решение для этого?

1 Ответ

0 голосов
/ 29 октября 2018

Office PIA (основные сборки взаимодействия) - это набор неуправляемых оболочек для приложений Office. Ваш код эффективно открывает Word и использует его, как обычный пользователь. Если Word закрывается преждевременно, он может оставить файл заблокированным. Вы не можете это контролировать.

Взгляните на OpenXML SDK. Файлы Word на самом деле являются документами XML, и вы можете работать с ними напрямую, не используя взаимодействия PIA COM. OpenXML намного, намного быстрее, чем PIA, и намного стабильнее.

Microsoft OpenXML SDK

...