WordApp.Quit()
выйдет из приложения.
Однако самый безопасный способ - получить управление процессом и уничтожить процесс winword. В C # следующий код будет делать это:
foreach (Process p in Process.GetProcessesByName("winword"))
{
if (!p.HasExited)
{
p.Kill();
}
}
Причина в том, что часто (я предполагаю, особенно если вы проверяете документы, созданные не Word), Word будет зависать с открытым окном сообщения, например диалог ремонта. В этом случае уничтожение процесса - самый простой способ закрыть приложение.
Я бы посоветовал вам сначала попытаться закрыть Word, используя Application.Quit
. Если это не работает, это указывает на проблему с вашим входным файлом (скорее всего, потому что диалог восстановления блокирует Word). Вы должны записать это как ошибку в своем журнале, а затем продолжить уничтожение процесса winword.
Другая проблема, с которой вы можете столкнуться, - это функция восстановления документов Word, блокирующая приложение при запуске (и, таким образом, предотвращающая открытие документа до тех пор, пока диалоговое окно восстановления не будет закрыто). Восстановление документа можно отключить, удалив следующий ключ реестра в HKCU и HKLM перед запуском Word (замените 12.0 на 11.0 для Word 2003 и 10.0 для Word XP):
Software\Microsoft\Office\12.0\Word\Resiliency
Само собой разумеется, что убийство Word - это довольно грубый подход, однако он простой и довольно надежный. Приведенный выше код просто уничтожит любой экземпляр Word для пользователя. Если вы хотите убить только конкретный экземпляр, все становится сложнее. Вам придется получить идентификатор процесса конкретного экземпляра Word. Обычно это можно сделать путем поиска заголовка окна экземпляра, например, используя функции WinAPI, такие как FindWindowByCaption
и GetWindowThreadProcessId
.