【问题标题】:How to disable multiple instances of my application running over RDP (Terminal Services)?如何禁用通过 RDP(终端服务)运行的应用程序的多个实例?
【发布时间】:2018-10-17 03:33:25
【问题描述】:

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



【问题讨论】:

    标签: c# .net wpf rdp terminal-services


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      • 2011-07-11
      • 2020-12-22
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      相关资源
      最近更新 更多