如何只允许一个用户运行我的C#程序,但也允许多个实例?

如何只允许一个用户运行我的C#程序,但也允许多个实例?,c#,mutex,C#,Mutex,情况是,我希望允许用户打开程序的多个实例,但我不希望多个登录用户同时使用该程序。因此,例如,如果程序安装在服务器上,并且多个用户可以将桌面远程连接到服务器,那么我只希望一个用户能够运行程序,但仍然能够运行多个实例。我曾研究过使用互斥体,但从我发现的情况来看,互斥体只允许程序的一个实例。这在C#中是可能的吗?我会禁用内置的单实例功能,然后编写自己的。只需逐步完成所有正在运行的进程,如果找到了自己的进程,请查看该用户是否等于当前用户。如果是,请退出其中一个实例 编辑:这将要求用户拥有管理员权限,这在

情况是,我希望允许用户打开程序的多个实例,但我不希望多个登录用户同时使用该程序。因此,例如,如果程序安装在服务器上,并且多个用户可以将桌面远程连接到服务器,那么我只希望一个用户能够运行程序,但仍然能够运行多个实例。我曾研究过使用互斥体,但从我发现的情况来看,互斥体只允许程序的一个实例。这在C#中是可能的吗?

我会禁用内置的单实例功能,然后编写自己的。只需逐步完成所有正在运行的进程,如果找到了自己的进程,请查看该用户是否等于当前用户。如果是,请退出其中一个实例


编辑:这将要求用户拥有管理员权限,这在您提议的情况下是不可能的。也许有更好的方法可以做到这一点,但您可以始终在文件或注册表中执行一些锁定。。。所有用户都有读/写权限的区域。每隔
x
秒左右用当前用户名和时间戳更新该锁文件。如果其他用户试图打开该程序,则您可以告诉他们是谁打开了该程序。如果当前用户已经打开了,那没什么大不了的。如果锁定文件已过期,请忽略它。。。您可以假设创建它的实例已不存在。

这通常是通过作为许可证管理器运行的单独应用程序来处理的。您可以使用服务许可证、跟踪当前使用情况并使应用程序在启动时连接到管理器的服务。经理可以检查凭据,并根据任何条件(包括仅1个用户(具有多个副本)、最多N个用户等)响应是否允许应用程序运行


很好地实现了与服务的通信。

我将使用一个命名的互斥体。在其保护范围内,保留当前登录用户的记录。如果存在一个,并且不是当前用户,则退出-否则,记录当前用户正在运行应用程序。

使用命名互斥。互斥体名称将是MyMutex\uuuu[用户名]
这样,每个用户都有一个不同的互斥锁。

这要求所有登录到远程服务器的用户都具有管理员权限。否则,他们无法列出在不同凭据下运行的进程。您能更具体一点吗?您想只限制一个特定用户,还是一次只允许一个用户?我想允许任何用户(但只有该用户)一次只能运行一个或多个实例。很遗憾,我没有让我们的用户安装单独的应用程序来运行此应用程序的选项。@Alex:很遗憾,在没有提升权限的情况下,没有真正有效的方法(通过设计)控制不同用户的行为。您可以在一个用户登录时限制应用程序的数量,但不能在没有管理员权限或调节服务的机器上进行。谢谢您的建议。我最终使用了一个由两个命名互斥体组成的系统,它似乎运行得很好。现在我必须看看QA是否能够打破它。