Приложение, запущенное пользователем, вышедшим из системы XP, можно увидеть на рабочем столе другого пользователя - PullRequest
0 голосов
/ 15 июля 2009

Это вопрос кодирования. Пожалуйста, прочитайте его, прежде чем пометить его как принадлежащее ServerFault, поскольку последнее, что я написал, было отправлено туда менее чем за 5 минут.

Я тестирую мое приложение win32 / c ++ на XP, которое имеет самые последние пакеты обновлений. Он содержит две учетные записи администратора без паролей. Я вхожу как Пользователь1 и запускаю свое приложение. Приложение запускается, появляется его главное окно и все хорошо с миром. Затем я отключаю User1, не закрывая приложение. Да, я использовал «выйти из системы», а не «переключить пользователя»

Затем я вхожу в систему как Пользователь2, и мое приложение все еще работает. Я вижу это на рабочем столе пользователя 2, и я даже могу взаимодействовать с ним. Кажется, он работает нормально. Диспетчер задач показывает, что он работает под именем User1.

Есть идеи, которые могут быть здесь? В других приложениях (например, в блокноте) эта проблема не возникает, а в моих - нет. Мне кажется, я делаю что-то не так в своем коде, но на самом деле это довольно стандартное приложение win32 / c ++. Возможно, я не обрабатываю сообщение о выключении должным образом? Извините, я не могу дать больше подробностей прямо сейчас. Я действительно надеюсь, что какой-нибудь ключ к разгадке дальнейших исследований.

Ответы [ 3 ]

1 голос
/ 16 июля 2009

Проверьте диспетчер задач Windows на 2 вещи:

  1. Столбец «Идентификатор сеанса»
    • столбец «Имя пользователя»

Если ни один из этих столбцов не отображается, выберите их в меню Вид -> Выбрать столбцы.

Проверьте, с каким именем пользователя и сеансом остается открытым ваше приложение. Затем перейдите и запустите notepad.exe и сравните его с идентификатором сеанса и именем пользователя, с которого он запускается.

Когда вы выйдете из системы, он закроет приложения, запущенные под вашим Session ID и именем пользователя.

Я предполагаю, что ваше приложение работает с собственным идентификатором сеанса и / или именем пользователя.

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

1 голос
/ 15 июля 2009

Вы уверены, что ваше приложение не работает как сервис? Сервис с «Взаимодействовать с рабочим столом» может выглядеть следующим образом.

UPDATE: Это должно быть как-то связано с услугой. Обычное приложение, запущенное в сеансе, будет вынуждено закрыться Windows до завершения выхода из системы. Даже если вы не обрабатываете сообщения о завершении сеанса, Windows сообщит пользователю о не отвечающем процессе и / или просто уничтожит его.

0 голосов
/ 15 июля 2009

Вам нужно прослушивать события завершения работы или выхода из системы?

Проверьте этот ответ на похожий вопрос.

Этот ответ относится к прослушиванию WM_QUERYENDSESSION.

См. WM_QUERYENDSESSION Сообщение

...