Starcraft II hindert mich daran, mehrere Instanzen auszuführen. Wenn ich jedoch die zweite Instanz mit Sandbox in Sandboxie ausführe , funktioniert dies. Was könnte das erklären?
Wie kann ich dieses Verhalten für meine eigenen Spiele replizieren?
Starcraft II hindert mich daran, mehrere Instanzen auszuführen. Wenn ich jedoch die zweite Instanz mit Sandbox in Sandboxie ausführe , funktioniert dies. Was könnte das erklären?
Wie kann ich dieses Verhalten für meine eigenen Spiele replizieren?
Antworten:
Abgesehen von Starcraft 2 lautet die allgemeine Antwort auf diese Frage: Erwerben (und sperren, wenn die Erfassung selbst nicht bereits dem Sperren entspricht) Sie eine bestimmte Ressource vom Betriebssystem. Beenden Sie das Spiel, wenn die Erfassung / Sperrung fehlschlägt. Beispiele für solche Ressourcen sind:
Auf der obersten Ebene, die für den Kunden am schmerzhaftesten ist, kann auf diese Weise auch spezielle Hardware verwendet werden, die (manchmal wie bei einigen Robotersteuerungskomponenten erforderlich) nur von einem einzigen Thread exklusiv verwendet werden kann.
Ich empfehle den Mutex-Ansatz, aber:
Eine andere häufig verwendete Methode ist die einfache Überprüfung, ob ein anderer Prozess mit demselben Namen ausgeführt wird.
Der Vorteil ist, dass es lächerlich einfach ist - Sie müssen sich keine Gedanken über Dateiberechtigungen machen oder wissen, was ein Mutex ist. Der Nachteil ist, dass Sie ein falsches Positiv erhalten, wenn ein anderes aufgerufenes Programm starcraft2.exe
auf dem Computer ausgeführt wird.
Wenn Sie C ++ und die Windows-API verwenden, können FindWindow
Sie unter anderem Parameter wie den Klassennamen und / oder den Fensternamen übergeben. Wenn Sie dann eine Übereinstimmung finden, beenden Sie einfach Ihr Programm, bevor Sie überhaupt ein Fenster laden oder erstellen.