在相同的会话窗口中,每个用户只能使用实例

本文关键字:用户 实例 会话 窗口 | 更新日期: 2023-09-27 18:11:31

同一个会话窗口中每个用户只能有一个实例。

我正在编写一个程序,多个用户可以进入,但每个用户只能打开一个实例。问题是如何检查它是否已经运行了某个实例,该用户并将其带到前台应用程序,但该用户试图进入时打开。

我正在尝试分配或找出活动系统进程的ID或可以记录和读取的东西,以便在应用程序启动时检查该用户是否已经运行某些实例。

我现在使用Diagnostics.Process.GetProcessesByName (Diagnostics.Process.GetCurrentProcess.ProcessName),但只值得有一个运行的实例

在相同的会话窗口中,每个用户只能使用实例

我以前遇到过类似的问题。我正在创建一个应用程序,我只想运行一个实例。然后我创建了

我是这样处理的。我创建了一个WCF管道服务:

[ServiceContract]
interface DNRIService 
{
    [OperationContract]
    void OpenDnt(string path);
    [OperationContract]
    void OpenPak(string path);
    [OperationContract]
    bool IsOnline();
    [OperationContract]
    void Activate();

}

然后我这样做了:

public Main(String [] args) : this()
{
    try
    {
        using (ChannelFactory<DNRIService> serviceFactory = new ChannelFactory<DNRIService>(new NetNamedPipeBinding(), new EndpointAddress(PipeService)))
        {
            var channel = serviceFactory.CreateChannel();
            if(channel.IsOnline())
            {
                foreach (var argument in args)
                {
                    var argTrim = argument.Trim() ;
                    if (argTrim.EndsWith(".dnt"))
                        channel.OpenDnt(argument);
                    else if (argTrim.EndsWith(".pak"))
                        channel.OpenPak(argument);
                }
                channel.Activate();
                Close();
            }
        }
    }
    catch
    {
        @this = new ServiceHost(this, new Uri(PipeName));
        @this.AddServiceEndpoint(typeof(DNRIService), new NetNamedPipeBinding(), PipeService);
        @this.BeginOpen((IAsyncResult ar) => @this.EndOpen(ar), null);
        foreach (var argument in args)
        {
            var argTrim = argument.Trim();
            if (argTrim.EndsWith(".dnt"))
                OpenDnt(argument);
            else if (argTrim.EndsWith(".pak"))
                OpenPak(argument);
        }
    }
}

注意,它尝试以相同的名称打开。如果不能,它就关闭,并假设另一个已经打开。然后,它尝试将它的参数发送给原始对象。

您只需要做一点修改就可以获得当前用户。这个问题应该能帮到你:如何使用c#在。net中获得当前用户名?

其余部分由您实现。如果你想看我发布的完整代码,它位于这里:

https://github.com/Aelphaeis/Dragon-Nest-Resource-Inspector

(运行它会让你知道它是如何工作的,只允许一个实例)。