防止多个登录到同一台计算机的技术
-
19-09-2019 - |
题
我在这里重新提出了这个问题,因为Serverfault中的人 认为这是问这个的合适地方.
我正在尝试防止人们多登录到一台计算机并使用我的应用程序 同时. 换句话说,我想防止它在同一计算机上两次运行,同时在任何给定时间中,只有一个用户运行我的应用程序.
我有理由设置严格的许可使用情况;我的应用程序服务于非常专业且非常利基市场。因此,每个副本的成本约为数万。如果这样的多个远程登录技术获得的优势,我将立即将其倒闭。
这是因为我想阻止他们购买一个许可证,将其安装在机器上,并使用某些远程桌面技术进行多个用户登录。 我想防止他们违反许可协议 从技术上讲, ,而不是执法。
无论如何,我可以在申请中做到吗?还是完全不可能同时登录?
我更喜欢非加密解决方案。我的应用程序仅在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\
前缀使MUTEX在多个终端服务器会话上共享。没有它,它只会阻止用户在同一会话中运行两个实例。
您应该在具有有限权利的帐户上测试此方法,因为有限的帐户可能根本无法创建这种静音。
其他提示
你想防止它 跑步 在同一台计算机上两次?
如果是这样,解决方案可能非常简单。取出系统范围内的静音或一些类似的方法,然后检查一下并确保它尚不存在。您可以打开插座或其他任何东西来实现这一目标。
还是您想以某种方式停止一个帐户,除了安装它的帐户,运行它吗?