Der untenstehende Code ist auch falsch!! Korrekter Code wie oben!!
Manchmal müssen wir nur eine Instanz der Anwendung ausführen lassen, und wenn der Prozess startet und feststellt, dass eine Instanz der Anwendung läuft, hört sie automatisch auf. Wir implementieren sie üblicherweise in der Hauptfunktion über einen Mutex-Mutex, der üblicherweise geschrieben wird:
Wenn wir nach Antworten suchen, kommen und gehen wir oft in Eile und ignorieren die Funktionen und Vorsichtsmaßnahmen von Mutex. Nach einem einfachen Test, okay, mach es und benutze es. An dieser Stelle übersehen wir eine wichtige Voraussetzung:Mutex-Namenskonventionen. Die obige Schreibmethode funktioniert problemlos unter einem einzelnen Benutzer; Bei Multi-User kann jeder Benutzer eine Instanz starten, sodass eine einzelne Instanz nicht garantiert werden kann.
Wenn Sie es auf einem Terminalserver verwenden müssen und nur eine Instanz zulassen, verwenden Sie folgende Methode:
Hier ist die Beschreibung von MSDN:
Auf Servern, die Terminaldienste ausführen, kann benanntes System-Mutex zwei Sichtbarkeitsstufen haben. Wenn der Name mit dem Präfix "Global\" beginnt, ist der Mutex in allen Terminalserversitzungen sichtbar. Wenn der Name mit dem Präfix "Local\" beginnt, ist der Mutex nur in der Terminalserver-Sitzung sichtbar, die ihn erstellt hat. In diesem Fall kann jede andere Terminalserver-Sitzung auf dem Server einen separaten Mutex mit demselben Namen haben. Wenn du einen benannten Mutex erstellst, ohne ein Präfix anzugeben, nimmt er das Präfix "Local\" an. In einer Terminalserversitzung sind zwei Mutexe mit unterschiedlichen Namenspräfixen unabhängige Mutexe, und die beiden Mutexe sind für alle Prozesse in der Terminalserversitzung sichtbar. Das heißt, die Präfixnamen "Global" und "Local" beschreiben den Bereich des Mutex-Namens relativ zur Terminalserversitzung, nicht zum Prozess.
|