Проблемы при создании приложения VSTO WordC#

Место общения программистов C#
Anonymous
Проблемы при создании приложения VSTO Word

Сообщение Anonymous »

Создание нового приложения VSTO Word работает почти во всех случаях. Я использую эту строку для создания нового экземпляра:

Код: Выделить всё

var wordApplication = new Application {Visible = false}
(Приложение — «Microsoft.Office.Interop.Word.Application»)

Мы делаем это часто в модульных тестах и ​​в некоторых средствах автоматизации. Но один или два раза примерно из 1000 вызовов инициализация не завершается, и процесс зависает. (Кто-нибудь знает причину?)

Чтобы решить эту проблему, я заключаю создание экземпляра в тайм-аут и пробую еще раз:

Код: Выделить всё

var wordApplication = Utilities.CallWithTimeout(
// stuff to do
() => new Application {Visible = false},

// error handler before the TimeoutException happens
() =>
{
var info = "Try to create a WordApplication failed after 15 seconds";
Tracer.TraceEvent(TraceEventType.Error, info, TraceCategory.Application);
KillWordApplicationOnError(before);
},

// timeout
TimeSpan.FromSeconds(15));
(CallWithTimeout: https://gist.github.com/JuergenGutsch/b ... 06327a6a41 Повторная попытка выполняется с помощью этого метода: https://gist.github.com/JuergenGutsch /219e9fe3e5aad1a098f3)

Мы убиваем приложение, идентифицируя текстовый процесс, и убиваем этот процесс. Помните, что поскольку создание экземпляра зависло, у нас нет приложения Word, которое могло бы использовать Quit(), но запущен процесс winword.exe, и нам нужно его завершить. (Как мы убиваем процесс: https://gist.github.com/JuergenGutsch/9 ... 51c15bab83)

Это решает проблему с зависанием процесса и мы получаем новую проблему , что происходит один или два раза примерно на 3000 вызовов. Новая проблема связана с безопасностью, которая отключает одну или все надстройки Word, а также некоторые пользовательские шаблоны dotm, содержащие макросы VBA.

Мы не получаем никаких исключений. и мы не получаем никаких записей в журнале событий. За исключением этого сразу после завершения процесса:

Код: Выделить всё

An exception of type 'System.Runtime.InteropServices.COMException' occurred in BIS.MEDCS.Connectivity.Word.VSTO.dll but was not handled in user code

Additional information: Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).
Но это исключение обрабатывается при повторной попытке, и создание экземпляра работает при следующей попытке.

Кто-нибудь из ты знаешь, что здесь происходит?

Подробнее здесь: https://stackoverflow.com/questions/355 ... pplication

Вернуться в «C#»