Запуск 1 экземпляра программы на каждого пользователя

86
12 августа 2019, 15:30

Представим терминал, на нем сидит n-ое кол-во пользователей. Как сделать так, что бы каждый пользователь мог запустить 1 экземпляр программы?

Видел решение контроля этого для одного пользователя системы через создание Mutex с определенным именем и проверкой его существования. Ну, вроде, это работать не будет, так как Mutex-это, по идее, глобальный объект ОС.

Видел решение, через проверку существующих экземпляров и просмотр логина пользователя. Однако, для этого, по идее, нужны спец. права. Так как в том же Task Manager нельзя без спец. прав посмотреть процессы других юзеров в системе.

Answer 1

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

Нет. Твоя задача тать возможность запускать одну программу на одного юзера. Проверку что там у других юзеров делать вообще не нужно! И спецправ иметь не нужно, соответственно. А для чего? В рамках одного инстанса программы нужно знать только про другие инстансы программы под конкретным данным юзером. Другие пользователи тебя колыхать не должны вообще, если так подумать :)

И да, дополнительное гугление по ключевикам

c# app instance "per user"

показало, что прекрасным способом для поставленной задачи является создание локального мьютекса ( "Local\" ). Но может быть возможность запуска нескольких сессий одного юзера. На серверах например. И тогда может вылезти проблемка.

Но если хочется быть на 100% уверенным в том, что только 1 инстанс на юзера, то нужно использовать "Global\" + UserDomainName + UserName + гуид.

string globalMutexName = string.Format(
    CultureInfo.InvariantCulture,
    "Global\\AppName~{0}~{1}~some-unique-guid",
    Environment.UserDomainName,
    Environment.UserName);
_machineLocalAppInstanceMutex = new System.Threading.Mutex(true, globalMutexName, out mutexIsNew);
if (!mutexIsNew)
{
    Shutdown();
}
READ ALSO
Проблема при добавлении Framework сборок в SQL Server

Проблема при добавлении Framework сборок в SQL Server

Есть необходимость добавления CLR сборки в связке с самописной библиотекой классов (подключение к внешнему веб-сервису)При установке библиотеки...

136
Упрощение кода оператора if

Упрощение кода оператора if

Есть такой код на C#Можно ли его как-то упростить и привести к однострочному виду, т

96