Starcraft II mi impedisce di eseguire più istanze, ma se eseguo la seconda istanza in modalità sandbox in Sandboxie , funziona. Cosa potrebbe spiegare questo?
Come potrei replicare questo comportamento per i miei giochi?
Starcraft II mi impedisce di eseguire più istanze, ma se eseguo la seconda istanza in modalità sandbox in Sandboxie , funziona. Cosa potrebbe spiegare questo?
Come potrei replicare questo comportamento per i miei giochi?
Risposte:
A parte Starcraft 2, la risposta generale è: acquisire (e bloccare, se l'acquisizione stessa non è già equivalente al blocco) una risorsa specifica dal sistema operativo. Esci dal gioco se l'acquisizione / blocco falliscono. Esempi di tali risorse sono:
Nell'estremità più complessa per il cliente, è possibile utilizzare in questo modo anche hardware specializzato che (a volte necessariamente, come per alcuni componenti di controllo robotici) può essere utilizzato esclusivamente da un singolo thread.
Raccomando l'approccio mutex, ma:
Un altro metodo che viene spesso utilizzato è semplicemente verificare se è in esecuzione un altro processo con lo stesso nome.
Il vantaggio è che è ridicolmente semplice: non devi preoccuparti dei permessi dei file o sapere cos'è un mutex. Il rovescio della medaglia è che otterrai un falso positivo se un programma diverso chiamato starcraft2.exe
è in esecuzione sulla macchina.
Se stai usando C ++ e l'API di Windows, un modo che puoi fare è usare FindWindow
, dove puoi passare parametri come il nome della classe e / o il nome della finestra. Quindi se trovi una corrispondenza, esci dal programma prima ancora di caricare o creare una finestra.