Starcraft II m'empêche d'exécuter plusieurs instances, mais si j'exécute la deuxième instance en sandbox dans Sandboxie , cela fonctionne. Qu'est-ce qui pourrait expliquer cela?
Comment puis-je reproduire ce comportement pour mes propres jeux?
Starcraft II m'empêche d'exécuter plusieurs instances, mais si j'exécute la deuxième instance en sandbox dans Sandboxie , cela fonctionne. Qu'est-ce qui pourrait expliquer cela?
Comment puis-je reproduire ce comportement pour mes propres jeux?
Réponses:
Mis à part Starcraft 2, la réponse générale à cette question est la suivante: acquérir (et verrouiller, si l'acquisition elle-même n'est pas déjà équivalente au verrouillage) une ressource spécifique du système d'exploitation. Quittez le jeu si l'acquisition / le verrouillage échoue. Des exemples de telles ressources sont:
Sur le haut de gamme, le plus pénible pour le client, du matériel spécialisé qui (parfois nécessairement, comme pour certains composants de contrôle robotique) ne peut être utilisé exclusivement que par un seul thread peut également être utilisé de cette façon.
Je recommande l'approche mutex, mais:
Une autre méthode souvent utilisée consiste simplement à vérifier si un autre processus du même nom est en cours d'exécution.
L'avantage est que c'est ridiculement facile - vous n'avez pas à vous soucier des autorisations de fichiers ou à savoir ce qu'est un mutex. L'inconvénient est que vous obtiendrez un faux positif si un autre programme appelé starcraft2.exe
s'exécute sur la machine.
Si vous utilisez C ++ et l'API Windows, vous pouvez utiliser l'une des méthodes suivantes FindWindow
, où vous pouvez transmettre des paramètres tels que le nom de la classe et / ou le nom de la fenêtre. Ensuite, si vous trouvez une correspondance, quittez simplement votre programme avant même de charger ou de créer une fenêtre.