如何通过 RDP(终端服务)禁用我的应用程序 运行 的多个实例?

How to disable multiple instances of my application running over RDP (Terminal Services)?

我有一个 c#/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 会话中禁用第二个应用程序实例 运行 吗?



我想每个远程连接都来自另一个用户。您可以使用以下内容来确定进程的所有者:How do I determine the owner of a process in C#?

过去,我使用 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();     
}