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

У меня есть приложение 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 ответа


Раньше я это делал с помощью 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();     
}

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


Есть идеи?

10000