【问题标题】:Prevent multiple instances in server same username防止服务器相同用户名中的多个实例
【发布时间】:2013-06-18 20:18:13
【问题描述】:

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

PS:我正在使用 Winforms 和 C#

【问题讨论】:

  • 您可以轻松获取正在运行的进程列表。然后看看这个以获得进程的所有者:stackoverflow.com/questions/300449/…
  • @Dilshod 如果用户在使用 Remote Desktop 时不是机器中的管理员,这可能不是那么容易

标签: c# winforms


【解决方案1】:

您可以使用用户名创建互斥锁。

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

【讨论】:

  • 干净的解决方案,但是有什么方法可以显示用户试图再次打开的已打开表单?
  • @ymorales 另一个问题可以得到比我的 cmets 更好的反馈。
  • 您可能应该在互斥锁名称前加上@"Global\" 前缀,以确保在所有终端服务器会话中都可以看到它,而不仅仅是在当前实例中。正如 zmbq 指出的那样,您可能应该包含应用程序的名称,以避免与可能使用您的代码示例的其他软件发生冲突。
  • 这应该放在我的 C# 应用程序的哪个函数中?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    相关资源
    最近更新 更多