Как узнать, какой процесс COM-сервера «одноразового использования» перезапустить, если он завис - PullRequest
2 голосов
/ 24 февраля 2011

Мне нужно запустить какой-нибудь собственный код C ++ таким образом, чтобы в случае сбоя он не влиял на мою программу на C #.Я могу использовать COM-сервер out-proc с активацией «одноразового использования» , чтобы каждый экземпляр COM-объекта размещался в отдельном процессе.

Теперь я создаю набор рабочих потоков и каждый из них.создает экземпляр этого COM-объекта.Я также создаю «сторожевой» поток, который будет следить за рабочими потоками.

Предположим, что сторожевой поток замечает, что последний вызов объекта out-proc выполняется уже два дня, и это, вероятно, означает, чтообъектный код только что завис.Поэтому он хочет перезапустить процесс и для этого нужен идентификатор процесса.Как он находит идентификатор процесса?

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

Какие еще есть способы?

...