Технология предотвращения нескольких входов в систему на одном компьютере - PullRequest
1 голос
/ 20 августа 2009

Я снова задал этот вопрос здесь, потому что люди на ServerFault посчитали, что это подходящее место, чтобы задать этот .

Я пытаюсь запретить нескольким пользователям входить в систему на одном компьютере и одновременно использовать мое приложение . Другими словами, я хочу, чтобы он не запускался дважды на одном и том же компьютере в одно и то же время. В любой момент времени только один пользователь должен запускать мое приложение .

У меня есть причина установить строгое использование лицензии; мое приложение обслуживает очень специализированный и очень нишевый рынок. Следовательно, каждая копия стоит около десятков тысяч. Если бы такая технология удаленного входа в систему приобрела известность, я бы быстро прекратил свою деятельность.

Это потому, что я хочу помешать им купить одну лицензию, установить ее на компьютере и использовать определенные технологии удаленного рабочего стола для входа нескольких пользователей. Я хочу не допустить, чтобы они нарушали лицензионное соглашение технологически вместо правоприменения.

Есть ли что-нибудь, что я могу сделать в своем заявлении для этого? Или множественный вход одновременно просто невозможен?

Я бы предпочел решение без ключа. Мое приложение работает только на Windows.

Редактировать: чтобы еще больше усложнить ситуацию, я разрешаю одновременный доступ к разным версиям (мои клиенты могут установить несколько версий одного и того же программного обеспечения на одном компьютере и запускать их одновременно). Я просто не разрешаю одновременный удаленный вход в систему.

Ответы [ 2 ]

2 голосов
/ 20 августа 2009

Позвольте мне немного прояснить мою точку зрения. По крайней мере, по-шелковисто, и я, кажется, интерпретирую это по-другому.

Насколько я понимаю, вы пытаетесь предотвратить одновременный вход нескольких пользователей (или нескольких экземпляров одного и того же пользователя) на машину . При этом вы предполагаете, что единственная цель машины - запустить ваше приложение, что, как правило, не так.

Использование подхода Silky (общесистемного мьютекса) для предотвращения запуска нескольких экземпляров на одном компьютере допустимо. Лично я хотел бы убедиться, что нет единственного допустимого варианта использования для одного пользователя, выполняющего два экземпляра вашего приложения, для выполнения задачи, прежде чем использовать этот подход.

См. Также эту любимую мозоль программиста . Запрет на использование несколькими пользователями одной и той же машины относится к одной категории;)

Что касается проблемы с несколькими версиями: выберите уникальное имя для общесистемного мьютекса для каждой (основной?) Версии приложения.

Базовый пример с общесистемным Mutex:

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\ делает мьютекс общим для нескольких сеансов терминального сервера. Без этого он только запретил бы пользователю запускать два экземпляра в одном сеансе.

Вам следует протестировать этот подход на учетной записи с ограниченными правами, поскольку вполне возможно, что ограниченные учетные записи вообще не могут создать такой мьютекс.

2 голосов
/ 20 августа 2009

Вы хотите, чтобы дважды не запускал на одном компьютере?

Если это так, решение может быть довольно простым; удалите общесистемный мьютекс или какой-то подобный подход, а затем просто проверьте это и убедитесь, что он еще не существует. Вы можете открыть сокет или что-то еще, чтобы достичь этого.

Или вы хотите как-то остановить учетную запись, кроме той, которая ее установила, запустив ее?

...