2015-04-16 3 views
0

У меня была проблема, когда мое приложение просто прекращало делать что-либо вообще, когда оно достигла определенной команды Office Interop, совсем недавно это было закрытие Word.Приложение прекращает обработку во время Office Interop

worddoc.SaveAs("ExampleFile.doc", FileFormat:=Word.WdSaveFormat.wdFormatHTML, AddToRecentFiles:=False) 
worddoc.Close() 
wordap.Quit() 
wordap = Nothing 

В некоторых случаях, это было не воспроизводимы вообще, приложение просто купируются продолжать после достижения worddoc.close(). Не было никаких ошибок, никаких Windows, которые говорили мне: «... перестали работать», ничего не произошло. Когда я остановился в приложении, чтобы проверить, где он застрял, он всегда указывал мне на фразу worddoc.close независимо от того, сколько раз я возобновлял и восстанавливал приложение (я всегда ждал от 5 до 15 секунд до следующего действия), он был курсором программы, т. Эта проблема никогда не появлялась, когда у меня была конфигурация релиза и не перехватывала ни с одной точки с точкой останова, особенно она никогда не появлялась при распространении приложения к конечным пользователям.

В любом случае, я хотел бы знать, что вызывает эту проблему и как ее исправить, потому что сегодня я получил письмо, в котором говорилось, что это происходит и в конце версии, по крайней мере для некоторых людей.

+0

После перекомпиляции проекта и отправки ему нового exe-файла он снова работал, но в любом случае должна появиться причина, по которой приложение застряло здесь. – lsteinme

+0

Возможно, это не предложение, которое вы хотите услышать, но если вы можете решить проблему без OfficeInterop, это сделает ваш проект намного проще в обслуживании. – hometoast

+1

Я знаю, но в этом случае его невозможно (пользователям нужны некоторые функции, которые довольно специфичны для Word – lsteinme

ответ

0

Попробуйте вместо этого использовать метод класса SaveAs2 и укажите полный путь и имя документа, переданные как первый аргумент (а не только имя).

Также я предлагаю освободить все базовые COM-объекты в коде. Используйте System.Runtime.InteropServices.Marshal.ReleaseComObject, чтобы освободить объект Outlook, когда вы его закончили. Затем установите переменную Nothing в Visual Basic (null на C#), чтобы освободить ссылку на объект.

BTW Где вы используете код? Это сервис Windows?

Есть ли у вас надстройки над Word? Если это так, попробуйте отключить все из них.

Смежные вопросы