09.04.2008, 16:39 | #1 |
Участник
|
Мониторинг состояния COM объекта
Есть следующая задача: DAX управляет работой некой программы через COM объект. В случае когда эта программа закрывается не из DAX, т.е. DAX не знает о том что программа была закрыта, DAX продолжает пытаться дергать методы экземпляра COM и получает ошибку времени выполнения. Задача состоит в том, чтобы каждый раз, перед тем как вызвать метод COM - объекта, проверять, существует ли соответствующий ему процесс. На данный момент представляю решение след. образом:
|
|
09.04.2008, 17:08 | #2 |
Участник
|
Цитата:
Сообщение от axaLearner
Есть следующая задача: DAX управляет работой некой программы через COM объект. В случае когда эта программа закрывается не из DAX, т.е. DAX не знает о том что программа была закрыта, DAX продолжает пытаться дергать методы экземпляра COM и получает ошибку времени выполнения. Задача состоит в том, чтобы каждый раз, перед тем как вызвать метод COM - объекта, проверять, существует ли соответствующий ему процесс.
PS. Получить handle процесса (COM-сервера) можно, перебрав запущенные процессы и выбрав нужный по имени - это, конечно, для случая, когда в каждый момент времени может быть запущен один экземпляр соотв. процесса. Последний раз редактировалось gl00mie; 09.04.2008 в 17:10. |
|
|
За это сообщение автора поблагодарили: axaLearner (1). |
09.04.2008, 17:21 | #3 |
Участник
|
gl00mie, спасибо за ответ, модель с использованием ожидающего потока мне понравилась и должна меня устроить.
С handle пока проблема - одна сессия DAX будет запускать один и тот же COM-сервер в нескольких экземплярах и с точки зрения DAX каждый будет запущен для каких-то спец. нужнд, т.е. необходимо их различать и перебор по имени, насколько я понимаю, не подойдет. |
|
10.04.2008, 10:15 | #4 |
Developer
|
Цитата:
З.Ы. В рамках тройки фраза "создайте отдельный поток" звучит интрегующе |
|
10.04.2008, 15:53 | #5 |
Участник
|
Вызвать в try cath какой-нибудь "безобидный" метод COM если упал в cath значит COM убит.
|
|
10.04.2008, 16:39 | #6 |
Участник
|
Try/catch не проходят - когда процесс уничтожен, попытка вызова метода на COM - объекте вызывает ошику времени выполнения, ту что со Stack Trace, с сообщением "COM object does not have method 'метод который пытаемся вызвать'".
|
|