在相同的会话窗口中,每个用户只能使用实例
本文关键字:用户 实例 会话 窗口 | 更新日期: 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