Ограничить приложение одним экземпляром на сеанс оболочки в Windows - PullRequest
0 голосов
/ 18 февраля 2010

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

У пользователя может быть больше, чем сеанс входа в систему и оболочка на окнах (верно?)? Если это так, я хочу иметь возможность запускать один экземпляр моего приложения в каждом сеансе оболочки, но разрешать только один.

Есть ли способ получить идентификатор оболочки, который затем может быть вставлен в имя мьютекса?

Ответы [ 4 ]

5 голосов
/ 18 февраля 2010

Вы можете создавать локальные (только для сеанса) или глобальные (для всей системы) мьютексы. См. http://msdn.microsoft.com/en-us/library/system.threading.mutex.aspx для получения дополнительной информации. Ищите глобальные и локальные.

0 голосов
/ 18 февраля 2010

Если вы хотите ограничить его одним экземпляром на сеанс входа в систему, даже если в одной и той же учетной записи пользователя одновременно выполняется несколько сеансов входа в систему (сервер / сервер терминалов), вы можете использовать дескриптор из GetShellWindow, чтобы проверить, есть ли это экземпляр, уже запущенный для этого рабочего стола.

0 голосов
/ 18 февраля 2010

Вы можете перейти от идентификатора процесса текущего процесса к идентификатору сеанса WTS, я думаю, это будет делать то, что вам нужно. ProcessIdToSessionId

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

0 голосов
/ 18 февраля 2010

Идентификатором оболочки, которую вы хотите использовать, является имя пользователя. Это доступно как Environment::UserName или GetUserName()

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