我在这里重新提出了这个问题,因为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在多个终端服务器会话上共享。没有它,它只会阻止用户在同一会话中运行两个实例。

您应该在具有有限权利的帐户上测试此方法,因为有限的帐户可能根本无法创建这种静音。

其他提示

你想防止它 跑步 在同一台计算机上两次?

如果是这样,解决方案可能非常简单。取出系统范围内的静音或一些类似的方法,然后检查一下并确保它尚不存在。您可以打开插座或其他任何东西来实现这一目标。

还是您想以某种方式停止一个帐户,除了安装它的帐户,运行它吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top