情况是我想允许用户打开程序的多个实例,但我不希望多个登录用户一次使用该程序。因此,例如,如果程序安装在服务器上,并且多个用户可以远程桌面到服务器,我只希望一个用户能够运行程序但仍然能够运行多个实例。我已经研究过使用互斥锁,但是我发现互斥锁只允许一个程序实例。这是C#可以实现的吗?
答案 0 :(得分:3)
这通常通过作为许可证管理器运行的单独应用程序来处理。您可以拥有一个提供许可证的服务,并跟踪当前使用情况,并使您的应用程序在启动时连接到管理器。管理员可以检查凭据,并根据任何条件响应是否允许应用程序运行 - 包括仅1个用户(具有多个副本),最多N个用户等。
Windows Communication Foundation适用于实现与服务之间的通信。
答案 1 :(得分:2)
我会使用一个名为Mutex的。在其保护范围内,记录当前登录的用户。如果存在,并且它不是当前用户,则退出 - 否则,记录当前用户正在运行该应用程序。
答案 2 :(得分:0)
我会禁用内置的一个实例功能并编写自己的功能。只需单步执行所有正在运行的进程,如果找到自己的进程,请查看用户是否等于当前用户。如果是,请退出其中一个实例。
修改:这将要求用户拥有管理员权限,这在您建议的情况下不太可能。有一种更好的方法可以做到这一点,但你总是可以在文件或注册表中做一些锁定......所有用户都有读/写访问权限的区域。每隔x
秒左右用当前用户名和时间戳更新锁定文件。如果另一个用户试图打开该程序,那么您可以告诉他们谁打开它。如果当前用户已经打开它,没什么大不了的。如果锁定文件已过期,请忽略它...您可以假设创建它的实例不再存在。
答案 3 :(得分:0)
使用命名的互斥锁。互斥锁名称将为 MyMutex_ [用户名] 这样,您将为每个用户使用不同的单个互斥锁。