Привет всем,
Разыскиваю возможность узнать о том, что текущий процесс закрывается. Цель: более корректное освобождение некоторых ресурсов. Код находиться в сборке, подгружаемой в некоторый процесс динамически через COM (IE plug-in).
Пробовал
Process.GetCurrentProcess().Exited += new EventHandler(CurrentProcess_Exited);
Не работает, что в принципе и ожидаемо — событие предназначено для слежения за чужими процессами.
Какие ещё есть варианты глобальных эвентов?
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Здравствуйте, server_mouse, Вы писали:
_>Привет всем, _>Разыскиваю возможность узнать о том, что текущий процесс закрывается. Цель: более корректное освобождение некоторых ресурсов. Код находиться в сборке, подгружаемой в некоторый процесс динамически через COM (IE plug-in). _>Пробовал _>
_>Process.GetCurrentProcess().Exited += new EventHandler(CurrentProcess_Exited);
_>
_>Не работает, что в принципе и ожидаемо — событие предназначено для слежения за чужими процессами.
_>Какие ещё есть варианты глобальных эвентов?
Несколько не понятно, кто за кем и кого в конце "прибить"?
Здравствуйте, G0ga, Вы писали:
G>Несколько не понятно, кто за кем и кого в конце "прибить"?
Если подробнее, то IE7-8 запускают отдельные закладки в отдельных процессах. Наш плагин должен использовать общие ресурсы. Достигается это тем, что первый стартанувший обявляет себя RemotingService, а остальные соотв. клиентами. Поскольку жизненный цикл процесса остаётся на совести IE, значит верить здесь нельзя ни во что — процесс может прибиться в любую секунду. Остаётся открытым вопрос корректного закрытия использованых Mutex, каналов связи для Remoting и подключённых RemoteEventHandlers. Есть подозрения, что всё может дурно закончится, поскольку OnQuit у окна-плагина не вызывается никогда.
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
_>Если подробнее, то IE7-8 запускают отдельные закладки в отдельных процессах. Наш плагин должен использовать общие ресурсы. Достигается это тем, что первый стартанувший обявляет себя RemotingService, а остальные соотв. клиентами. Поскольку жизненный цикл процесса остаётся на совести IE, значит верить здесь нельзя ни во что — процесс может прибиться в любую секунду. Остаётся открытым вопрос корректного закрытия использованых Mutex, каналов связи для Remoting и подключённых RemoteEventHandlers. Есть подозрения, что всё может дурно закончится, поскольку OnQuit у окна-плагина не вызывается никогда.
Вообще-то, получить уведомление об уничтожении любого процесса в любом случае документировано можно только в драйвере, в приложении ты никогда не сможешь узнать о том, что его сейчас кто-то убивает и уж тем более не успеешь ничего сделать перед этим. Ну это к тому, что если реально надо, то дорога к написанию драйвера и всем связанным с этим проблемам. Но действительно ли оно нужно? К слову сказать, объекты синхронизации типа мутексы (как и любые другие объекты ядра) автоматически и корректно уничтожаются в момент закрытия последнего хендла. Т.е. если каждый из "твоих" процессов держит хендл на мутекс, то вообще-то ничего страшного, — мутекс будет автоматически уничтожен при убийстве последнего "твоего" процесса. Полагаю, что с RemoteEventHandlers примерно такая же штука, потому что в итоге всё базируется на примитивах ядра...