我在这里再次提出这个问题,因为ServerFault的人们认为这是适当的地方 。
我试图防止多人login到一台计算机, 同时使用我的应用程序。 换句话说,我想阻止它在同一台计算机上运行两次,同时在任何给定的时间内,只有一个用户运行我的应用程序 。
我有理由设置严格的许可证使用。 我的应用程序服务于一个非常专业和非常利基的市场。 因此,每个拷贝花费数万。 如果这样的多重远程login技术突显,我将很快失去业务。
这是因为我想阻止他们购买一个许可证,将其安装在一台机器上,并使用某些远程桌面技术来进行多用户login。 我想阻止他们在技术上违反许可协议,而不是执法。
我如何以编程方式find我的MEGAsync文件夹?
某些应用程序停止所有获取击键的尝试
什么是在Windows应用程序的EXE本地存储数据的最佳方法是什么?
C# – closuressubprocess的inputstream
简单的C#应用程序无法正常工作,在Visual Studio中运行时工作正常
无论如何,我可以在我的申请呢? 或者是同时多个login是根本不可能的?
我更喜欢非encryption狗解决scheme。 我的应用程序仅在Windows上运行。
编辑:使事情进一步复杂化,我允许同时进行不同版本的访问(我的客户可以在同一台机器上安装同一软件的多个版本并同时启动)。 我只是不允许同时远程login。
vb 2008 WriteProcessMemory()返回0
如何杀死一个正在运行的程序,以及如何去捕捉它们?
WPF AutomationPeer.Initialize定期抛出NullReferenceException
我如何使用“networking服务”帐户启动控制台应用程序
Windows快速移动时改变光标
让我稍微澄清一下我的立场。 至少是丝绸般的,我似乎正在以不同的方式来解释这一点。
据我所知,你正试图阻止多个用户(或同一用户的更多的实例)在同一时间登录到机器上。 在这里,你假定机器的唯一目的是运行你的应用程序,通常不是这样的。
使用silky的方法(系统范围的互斥体)来防止多个实例在同一台机器上运行是可以接受的。 就个人而言,在采取这种方法之前,我想确保没有一个用户运行两个应用程序实例来完成任务。
另请参阅这个程序员的宠物狗 。 防止多个用户使用同一台机器属于同一类别;)
至于你的多版本问题:为你的应用程序的每个(主要?)版本选择一个唯一的系统范围的互斥体名称。
具有全系统互斥体的基本示例:
static class Program { private static Mutex appMutex = new Mutex(false,"Global\MyApp 1.0"); [STAThread] static void Main() { if (!appMutex.WaitOne(0)) { MessageBox.Show("Application is already running. Have a nice day."); return; } // ... } }
Global前缀使互斥体在多个终端服务器会话上共享。 没有它,它只会阻止用户在同一个会话中运行两个实例。
您应该在权限有限的帐户上测试此方法,因为限制帐户可能无法创建此类互斥。
你想阻止它在同一台计算机上运行两次吗?
如果是这样的话,解决方案可以非常简单; 取出一个全系统的互斥或类似的方法,然后检查并确保它不存在。 你可以打开一个套接字,或者其他任何东西来实现它。
或者你想以某种方式停止一个帐户,除了安装它,运行它?