Технология для предотвращения нескольких входов на один и тот же компьютер

StackOverflow https://stackoverflow.com/questions/1304397

  •  19-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

РЕДАКТИРОВАТЬ: Чтобы еще больше усложнить этот вопрос, я позволяю одновременному доступу к разной версии (мои клиенты могут установить несколько версий одного и того же программного обеспечения на одну машину и одновременно запустить их). Я просто не разрешаю одновременный удаленный вход.

Это было полезно?

Решение

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

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

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

Смотрите также это Pet Pereve Progrommer. Анкет Не допустить, чтобы несколько пользователей использовали одну и ту же машину, попадает в одну и ту же категорию;)

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

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

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

Другие советы

Вы хотите предотвратить это Бег дважды на одном компьютере?

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top