Як гра може завадити людям запускати кілька примірників себе?


Відповіді:


15

Окрім Starcraft 2, загальна відповідь на це: Набути (і заблокувати, якщо саме придбання вже не еквівалентно блокуванню) певного ресурсу з операційної системи. Вийдіть із гри, якщо придбання / блокування не вдалося. Прикладом таких ресурсів є:

  1. Конкретні порти TCP або UDP.
  2. Взаємовиключні замки ("мутекси") або семафори (ці два часто пов'язані на рівні ОС)
  3. Файли (файли журналу часто є найбільш очевидним вибором)

У самому верхньому кінці, таким способом може бути також використана спеціальна апаратура, яка (іноді обов'язково, як для деяких робототехнічних компонентів управління) може використовуватися лише однією ниткою.


5
Також може бути корисно пам’ятати про можливі ускладнення безпеки: « Одномоментна програма - це власний відмова в обслуговуванні ».
ДоситьTea

Оскільки він працює в пісочниці, мабуть, це не перший. 2 або 3 - це хороші можливості, оглянувши, які файли відкриті для їх процесів, ймовірно, це точно визначить.
Doug-W

3
@ Doug-W Я не бачу, як це працює в пісочниці виключення №1.
AttackingHobo

@AttackingHobo, якщо я не буду розуміти складність sandboxie, чи не факт, що порт пов'язаний за межами sandboxie, не виключає його зв'язування всередині? Або пісочниця забезпечує віртуальний інтерфейс для кожної програми, що працює всередині неї?
Doug-W

@Vigil Що стосується мене, ви можете цитувати Реймонда Чена цілий день, але, будь ласка, не додайте граматичних помилок до його цитат. : P (Просто скопіюйте їх / замість них.)
hheimbuerger

4

Я рекомендую підхід mutex, але:

Інший метод, який часто використовується, - це просто перевірити, чи запущений інший процес з такою ж назвою.

Перевага полягає в тому, що це смішно просто - вам не потрібно турбуватися про дозволи файлів або знати, що таке мютекс. Мінус полягає в тому, що ви отримаєте помилково позитивний результат, якщо на машині працює інша програма, що називається starcraft2.exe.


2
Hehe, або якщо користувач вирішив перейменувати програму.
Брендон

@Jonathan: Тоді не жорстко
кодуйте

1
Я мав на увазі більше подібне, що робити, якщо користувач копіює програму та перейменовує її та запускає її двічі?
Брендон

3

Якщо ви використовуєте C ++ та API Windows, один із способів - це використання FindWindow, де ви можете передавати такі параметри, як ім’я класу та / або ім'я вікна. Тоді якщо ви знайдете відповідність, просто вийдіть із програми, перш ніж ви навіть завантажите або створите вікно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.