Обработка выключения Windows с помощью ActiveX EXE-файлов вне процесса

У нас есть приложение, которое использует несколько внепроцессных COM-объектов для различных задач. Если пользователь говорит Windows завершить работу во время работы нашего приложения, то он отправляет всем приложениям (окнам верхнего уровня) уведомление о завершении работы, но COM-объекты OoP могут завершить работу до того, как родитель получит уведомление, и получат шанс на чистое завершение работы, что приведет к различные ошибки в разных компонентах.

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

Хотя мы можем справиться с ошибками в родительских процессах, есть ли способ для хостов ActiveX сказать Windows: "Я пока не закрываюсь, но сделаю это в свое время", или, что еще лучше, заставить Windows не уведомлять их в первое место?

Оба родительских процесса, объекты OoP и их хосты находятся в смеси C++ и VB6.

1 ответ

Решение

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

Или вы можете вызвать SetProcessShutdownParameters() на сервере ООП. Передайте уровень, который вы получили от GetProcessShutdownParameters() минус 1, чтобы клиент всегда получал уведомление о завершении работы перед сервером. Также работает с ООП-серверами, у которых нет скрытого окна верхнего уровня для получения сообщения Windows.

Другие вопросы по тегам