Проверка зависания процесса Office при использовании Office Automation

Есть ли способ проверить, не зависал ли процесс Microsoft Office (например, Word, Excel) при использовании автоматизации Office? Кроме того, если процесс завис, есть ли способ его прекратить?

13.08.2008 14:42:52
3 ОТВЕТА
РЕШЕНИЕ

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

Запуск в качестве службы затрудняет очистку. Например, с тем, что вы используете в качестве службы, вы можете выжить, убив заведомое слово или превзойти себя. Возможно, вам придется убить службу. Остановится ли ваша служба, если слово или excel находятся в этом состоянии.

Одна из проблем, связанных с попыткой проверить, зависла ли она, состоит в том, что ваш тест может вызвать запуск и работу нового экземпляра word, в то время как тот, на котором работает служба, все еще будет зависать.

Лучший способ определить, зависла ли она, - попросить ее сделать то, что она должна делать, и проверить результаты. Мне нужно знать больше о том, что он на самом деле делает.

Вот некоторые команды, которые нужно использовать в командном файле для очистки (обе должны быть в пути):

  • sc stop servicename - останавливает службу с именем servicename
  • sc start servicename - запускает службу с именем servicename
  • sc query servicename - запрашивает статус servicename

  • taskkill / F / IM excel.exe - завершает все экземпляры excel.exe

2
26.08.2008 16:22:18

Я могу ответить на второй половине; если в вашем коде есть ссылка на объект приложения, вы можете просто вызвать «Quit»:

private Microsoft.Office.Interop.Excel.Application _excel;
// ... do some stuff ...
_excel.Quit();

Для проверки зависшего процесса, я думаю, вы захотите попытаться получить некоторые данные из приложения и посмотреть, получите ли вы результаты в разумные сроки (проверьте таймер или другой поток или что-то в этом роде). Хотя, вероятно, есть лучший способ.

0
13.08.2008 15:30:34

Я помню, как делал это несколько лет назад, поэтому я говорю о Office XP или 2003 году, а не 2007.

Очевидно, что в наши дни лучшим решением для автоматизации является использование нового формата XML, описывающего docx и т. Д., С использованием пространства имен System.IO.Packaging.

В то время я замечал, что всякий раз, когда MSWord пинал ведро и ему было достаточно, на машине запускался процесс под названием «Доктор Ватсон». Это была моя первая подсказка, что Слово споткнулось и упало. Иногда я вижу несколько WINWORD.EXE , но мой код просто используется для поиска хорошего Доктора. Как только я увидел это (в коде), я убил все процессы WINWORD.EXE самого хорошего Доктора и перезапустил процесс пыток Word :-)

Надеюсь, что это даст вам некоторые подсказки относительно того, что искать.

Всего наилучшего,

Роб Г

PS Я мог бы даже выкопать код в моих архивах, если ты не придешь!

1
13.08.2008 15:34:41