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

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

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

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

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

1 Ответ

3 голосов
/ 02 марта 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...