Frage

Ich habe diese Frage hier neu gestellt, weil die Personen bei Serverfault Es ist der Ansicht, dass dies der geeignete Ort ist, um dies zu fragen.

Ich versuche zu verhindern, dass Personen sich mehrfach zu einem einzigen Computer anmelden und meine Anwendung verwenden gleichzeitig. Mit anderen Worten, ich möchte verhindern, dass es zweimal auf demselben Computer ausgeführt wird, gleichzeitig in einer bestimmten Zeit darf nur ein einzelner Benutzer meine Anwendung ausführen.

Es gibt einen Grund für mich, die Lizenznutzung streng festzulegen. Meine App dient einem sehr spezialisierten und sehr Nischenmarkt. Daher kostet jede Kopie etwa Zehntausende. Wenn ein solcher mehrfacher Remote -Login -Technologie -Förderer in kürzester Zeit aus dem Geschäft gestellt wird.

Dies liegt daran, dass ich sie daran hindern möchte, eine Lizenz zu kaufen, auf einem Computer zu installieren und bestimmte Remote -Desktop -Technologien zu verwenden, um mehrere Benutzeranmeldungen durchzuführen. Ich möchte verhindern, dass sie gegen die Lizenzvereinbarung verstoßen technologisch, anstelle von Strafverfolgungsbehörden.

Gibt es trotzdem, dass ich in meiner Bewerbung dafür tun kann? Oder ist mehrere Anmeldungen gleichzeitig einfach nicht möglich?

Ich würde eine Nicht-Dongle-Lösung bevorzugen. Meine Anwendung läuft nur unter Windows.

Bearbeiten: Um die Angelegenheit weiter zu komplizieren, erlaube ich gleichzeitige verschiedene Versionszugriffszugriff (meine Clients können mehrere Versionen derselben Software auf einem Computer installieren und gleichzeitig auferlegen). Ich erlaube einfach nicht gleichzeitige Remote -Anmeldung.

War es hilfreich?

Lösung

Lassen Sie mich meinen Standpunkt ein wenig klarstellen. Zumindest seidig und ich scheinen dies auf andere Weise zu interpretieren.

Von dem, was ich verstehe, versuchen Sie, mehrere Benutzer (oder mehr Instanzen desselben Benutzers) zu verhindern, Die Maschine zur selben Zeit. In diesem nehmen Sie an, dass die alleiniger Zweck der Maschine besteht darin, Ihre Anwendung auszuführen, was im Allgemeinen nicht der Fall ist.

Die Verwendung von Silkys Ansatz (systemweitem Mutex), um zu verhindern, dass mehrere Instanzen auf derselben Maschine ausgeführt werden, ist akzeptabel. Persönlich möchte ich sicherstellen, dass ein einzelner Benutzer zwei Instanzen Ihrer Bewerbung für einen gültigen Anwendungsfall gibt, um eine Aufgabe zu erfüllen, bevor Sie diesen Ansatz verfolgen.

Siehe auch das Pet Peeve des Programmierers. Das Verhindern mehrerer Benutzer, dieselbe Maschine zu verwenden, fällt in dieselbe Kategorie;)

Was Ihr Problem mit mehreren Versionen betrifft: Wählen Sie einen eindeutigen Namen für Ihren systemweiten Mutex für jede (Haupt-?) Version Ihrer Anwendung.

Grundlegende Beispiele mit einem systemweiten 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;
        }

        // ...
    }
}

Das Global\ Präfix macht das Mutex über mehrere Terminal -Server -Sitzungen freigegeben. Ohne sie würde es nur einen Benutzer daran hindern, zwei Instanzen in derselben Sitzung auszuführen.

Sie sollten diesen Ansatz auf einem Konto testen, das nur begrenzte Rechte hat, da es möglicherweise möglich ist, dass eingeschränkte Konten einen solchen Mutex überhaupt nicht erstellen können.

Andere Tipps

Möchten Sie es von verhindern? laufend zweimal auf demselben Computer?

Wenn dies der Fall ist, kann die Lösung recht einfach sein; Nehmen Sie einen systemweiten Mutex oder einen ähnlichen Ansatz heraus und überprüfen Sie das einfach und stellen Sie sicher, dass es noch nicht existiert. Sie könnten eine Steckdose oder was auch immer öffnen, um dies zu erreichen.

Oder möchten Sie irgendwie ein Konto stoppen, außer dem, der es installiert hat, und ausführen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top