Как отключить несколько экземпляров моего приложения, работающего через RDP (службы терминалов)? - PullRequest
0 голосов
/ 16 октября 2018

У меня есть приложение ac # / WPF, которое на некоторых клиентских сайтах работает через RPD, то есть приложение находится на клиентском сервере, и пользователи получают доступ через сеансы терминальных служб.

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

var processName = Process.GetCurrentProcess().ProcessName;   
                if (Process.GetProcesses().Count(p => p.ProcessName.Equals(processName)) > 1)
                {
                    this.Log.LogInfo(this.GetType(), "Process already running. Shutting down.");
                    Application.Current.Shutdown();
                    Process.GetCurrentProcess().Kill();
                }    

Однако, при использовании RPP это не будет работать, так как могут быть другие экземпляры приложения, работающие на другом RDP.сессий.

Кто-нибудь знает, как я могу отключить второй экземпляр приложения, работающий в том же сеансе RDP?



Ответы [ 2 ]

0 голосов
/ 16 октября 2018

В прошлом я выполнял это, используя Mutex .При создании мьютекса вы будете использовать соглашение об именах Global \\ MutexName для обработки сценариев служб терминалов.

// declare in your program
private static Mutex mutex = null;

bool createdNew;  
mutex = new Mutex(true, "Global\\MutexName", out createdNew); 

if (!createdNew)
{
    // Application is already running, so shutdown
    Application.Current.Shutdown();     
}
0 голосов
/ 16 октября 2018

Я думаю, что каждое удаленное соединение будет от другого пользователя.Вы можете использовать следующее, чтобы определить, кто является владельцем процесса: Как определить владельца процесса в C #?

...