Ограничить приложение одним экземпляром для каждого сеанса командной строки в Windows

StackOverflow https://stackoverflow.com/questions/2285110

Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top