这种情况是我想让用户打开该程序的多个实例,但我不想让多个登录用户一次使用该程序。因此,例如,如果程序安装在服务器上,并且多个用户可以将远程桌面安装到服务器上,我只希望一个用户能够运行该程序,但仍能够运行多个实例。我已经研究过使用互斥锁,但是从我发现的互斥锁只会允许该程序的一个实例。这是C#可能的东西吗?如何只允许一个用户运行我的C#程序,但也允许多个实例?
回答
我会使用一个命名的互斥体。在其保护内部,记录当前登录的用户。如果存在,并且它不是当前用户,则退出 - 否则,记录当前用户正在运行该应用程序。
感谢您的建议。我最终使用了两个名为mutexes的系统,它似乎工作得很好。现在我要看看QA是否能够打破它。 – 2010-10-22 17:09:37
我会禁用内置的一个实例功能并编写自己的。只需单步执行所有正在运行的进程,并且如果找到了您的进程,请查看用户是否与当前用户相同。如果是,退出其中一个实例。
编辑:这将要求用户拥有管理员权限,这在您提出的情况下不太可能。可能有更好的方法来做到这一点,但你总是可以在文件或注册表中进行一些锁定......所有用户都有读写权限的区域。使用当前用户名和时间戳更新该锁定文件,每隔x
秒左右。如果另一个用户试图打开该程序,那么你可以告诉他们谁打开了它。如果当前用户已经打开它,没什么大不了的。如果锁定文件已过期,请忽略它......您可以假定创建该文件的实例不再存在。
这将要求所有登录到远程服务器的用户都具有管理员权限。否则,他们无法列出在不同凭据下运行的进程。 – 2010-10-21 21:14:35
啊,好点!编辑我的答案... – Brad 2010-10-21 21:18:51
这是通常通过作为许可证管理器运行的独立应用程序处理的东西。您可以拥有提供许可证的服务,并跟踪当前的使用情况,并使您的应用程序在启动时连接到管理器。管理员可以检查凭证,并根据任何标准(包括只有1个用户(具有多个副本),最多N个用户等)来回应是否允许应用程序运行。
Windows Communication Foundation适用于实施与服务之间的通信。
不幸的是,我没有选择让我们的用户安装一个单独的应用程序来运行这个应用程序。 – 2010-10-21 23:16:17
@Alex:遗憾的是,没有提升权限,没有真正有效的方法来控制不同的用户(通过设计)。您可以限制一个用户登录内的应用程序数量,但不能通过没有管理员权限或主管服务的计算机。 – 2010-10-21 23:34:40
使用一个有名的Mutex。互斥体名称将为MyMutex_ [用户名] 这样,您将为每个用户使用不同的单个互斥体。
- 1. 允许用户运行同一程序的多个副本
- 2. 允许运行一个php脚本的多个实例
- 3. 只允许一个应用程序实例
- 4. 只允许一个Chromium应用程序实例
- 5. 只允许Chrome js扩展程序的一个活动实例
- 6. axwindowsmediaplayer的多个实例,只有一个允许全屏模式
- 7. c + +不允许栈实例,但允许新删除
- 8. Android - 我怎么只允许一个MediaPlayer的实例一次玩?
- 9. 方法只允许单用户运行
- 10. 使用MEF只允许每个应用程序最多2个实例
- 11. 只允许输入一个字符的实例C#
- 12. ,只允许上实例线程
- 13. 只允许一个脚落
- 14. 只允许两个线程在一个函数上运行
- 15. Java:仅允许一个类实例化
- 16. 只允许一个python脚本的1个实例
- 17. 可能允许一个uitableview允许多个和单个选择?
- 18. 只允许某个UIGestureRecognizer一次执行
- 19. Winsock - 允许多个客户端线程
- 20. 允许多个类
- 21. Java 1.4同步:只允许一个方法的实例运行(非阻塞)?
- 22. 意图之前只允许我用一个活动,没有允许的AsyncTask
- 23. Windows服务 - 只有一个实例,以允许一次
- 24. 允许用户ssh到EC2 Ubuntu实例?
- 25. 我如何使不允许列允许空和允许空列不允许空
- 26. 只允许使用信号量的应用程序的3个实例
- 27. 只允许一次
- 28. 如何只允许一个用户注册Stormpath
- 29. 如何只允许一个用户看到“UpdateView”?
- 30. 只允许8个字符
你能更具体吗?你想限制只有一个特定的用户,或任何用户,但一次只有一个? – slugster 2010-10-21 21:27:18
我希望能够允许任何用户,但只有该用户可以一次运行一个或多个实例。 – 2010-10-21 21:37:16