2013-06-18 36 views
5

我开发了一个托管在一台服务器上的应用程序。许多用户通过远程桌面连接访问它,但有时我在任务管理器中看到同一用户已打开2-x实例。 我需要防止同一用户无法打开多个实例。但请注意,该程序可以由不同的用户多次打开。 请原谅我的英语。 谢谢。防止服务器使用相同用户名的多个实例

PS:我使用的WinForms和C#

+0

您可以轻松获取正在运行的进程列表。然后看看这个获取过程的所有者:http://stackoverflow.com/questions/300449/how-do-you-get-the-username-of-the-owner-of-a-process – Dilshod

+0

@如果用户不是机器的管理员,使用*远程桌面* – I4V

回答

2

您可以创建用户名互斥。

bool b = true; 
Mutex mutex = new Mutex(true, Environment.UserName.ToLowerInvariant() , out b); 
if (!b) throw new InvalidOperationException("Another instance is running"); 
+0

干净的解决方案,但有什么方法可以显示用户试图再次打开的打开表单吗? –

+0

@ymorales另一个问题可以得到更好的反馈,然后我的意见。 – I4V

+1

您应该使用@“Global \”为互斥体名称加上前缀,以确保它可以在所有终端服务器会话中看到,而不是仅在当前实例中看到。正如zmbq所指出的,您应该包含应用程序的名称以避免与可能使用您的代码示例的其他软件发生冲突。 – EricLaw

1

推荐的方法来查看您的应用程序的另一个实例是否已经运行是使用互斥锁。例如,请参阅here

由于您希望允许应用程序的多个实例在不同的用户运行时运行,只需将当前用户名添加到互斥量的名称即可。例如,拨打互斥锁"MyApp"+Environment.UserName

相关问题