C # Word автоматизация приводит к сбою Windows Explorer - PullRequest
1 голос
/ 04 января 2012

Я написал программу на C #, которая импортирует список товаров из файла .xlsx и позволяет пользователю создавать заказ на основе этого списка товаров. Когда пользователь завершает работу, программа строит одну или несколько системных спецификаций на основе порядка. Эти спецификации записываются в файл .docx. Я установил Office 2007 на компьютер и использую пространства имен Microsoft.Office.Interop.Excel и Microsoft.Office.Interop.Word.

Проблема: После того, как я запустил программу, проводник Windows очень часто вылетает и должен перезагрузиться. Это происходит при навигации по папкам или при щелчке правой кнопкой мыши по папкам и т. Д. Это также происходит после того, как программа была закрыта, и единственным решением для ее остановки является перезагрузка компьютера. Кажется, что это происходит только тогда, когда я создал выходные файлы (.docx). Если я запускаю программу и использую ее, как обычно, но без создания файлов слов, проблема, похоже, не возникает. После того, как программа создала выходные файлы, Word получает «Visible» пользователю для ручного редактирования. Пользователь закрывает приложение word, когда заканчивает редактирование документов.

Что может вызвать сбой проводника Windows при запуске автоматизации слова? Мне действительно нужна помощь в этом. Любые предложения приветствуются.

1 Ответ

2 голосов
/ 04 января 2012

После выполнения у вас остались процессы ghost excel.exe и word.exe?

Эти призраки могут привести к нестабильной работе системы.

Скорее всего, вы не выпускаете должным образом COM-объекты, созданные вами с помощью автоматизации.

Используйте Marshal.ReleaseComObject(yourobj); на каждом объекте COM, который вы создаете. Это настоящая боль, я знаю.

Примечание: убедитесь, что вы не создаете экземпляры COM-объектов, не зная об этом:

mySheet = myExcelObject.workbooks[0].Sheet[0] не только создает экземпляр объекта листа, но и объекта рабочей книги.

Правило большого пальца: никогда не используйте вторичное свойство для COM-объекта (foo.bar.baz) и освобождайте все.

Последнее замечание: вообще не использует офисную автоматизацию на сервере, это плохо, по словам Microsoft, есть полностью управляемые библиотеки для что.

...