Известить процесс, запущенный под любым сеансом и аккаунтом
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 19.05.18 08:47
Оценка:
Есть приложение, подолгу живущее в трее. Юзеры иногда забывают, что оно уже активно, и пытаются запустить еще раз. Поначалу оно просто проверяло, есть ли работающий экземпляр (через создание глобального объекта ядра — события или мьютекса), и выдавало ошибку. Теперь захотелось, чтобы в такой ситуации новый экземпляр просил работающий вылезти из трея, а сам тихо завершался.

Попробовал управлять через те же глобальное событие/мьютекс, но, если у процессов разный уровень прав (например, пользователь-администратор), то CreateEvent/CreateMutex возвращают ERROR_ACCESS_DENIED. Для предотвращения запуска второго экземпляра это годится, а управлять уже не дает.

Попробовал через BroadcastSystemMessage — сообщения не передаются более привилегированному процессу, только в сторону понижения прав. Функция всегда возвращает 1. Пробовал в разных комбинациях BSM_APPLICATIONS, BSM_ALLCOMPONENTS, BSM_ALLDESKTOPS и BSF_SENDNOTIFYMESSAGE, BSF_POSTMESSAGE — ничего не меняется.

Все процессы запускаются в одном сеансе (1), различаются только Logon Session Id.

Пробовал добавлять SE_TSB_NAME — добавляется успешно, но тоже ничего не меняется.

Может, есть какой-нибудь минимально геморройный способ из одного процесса известить другой по известному им обоим идентификатору?
process notify broadcastsystemmessage event mutex instance
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.