게임에서 사람들이 여러 인스턴스를 실행하지 못하게하려면 어떻게해야합니까?


15

Starcraft II는 여러 인스턴스를 실행하지 못하도록 제한하지만 Sandboxie 에서 샌드 박스 된 두 번째 인스턴스를 실행하면 작동합니다. 이것을 설명 할 수있는 것은 무엇입니까?

내 게임에서이 동작을 어떻게 복제 할 수 있습니까?

답변:


15

Starcraft 2를 제외하고는 이에 대한 일반적인 대답은 다음과 같습니다. 운영 체제에서 특정 자원을 획득 (잠금 자체가 잠금과 아직 동일하지 않은 경우 잠금). 획득 / 잠금이 실패하면 게임을 종료하십시오. 이러한 자원의 예는 다음과 같습니다.

  1. 특정 TCP 또는 UDP 포트.
  2. 상호 배타적 잠금 ( "뮤텍스") 또는 세마포 (두 개는 종종 OS 수준과 관련이 있음)
  3. 파일 (로그 파일은 종종 가장 확실한 선택입니다)

고객의 입장에서 가장 고통스러운 최고급에서는 (일부 로봇 제어 구성 요소와 같은 경우에 따라) 단일 스레드에서만 독점적으로 사용할 수있는 특수 하드웨어도 이러한 방식으로 사용될 수 있습니다.


5
또한 가능한 보안 문제를 염두에 두는 것이 유용 할 수 있습니다. " 단일 인스턴스 프로그램은 자체 서비스 거부입니다 ."
EnoughTea

샌드 박스에서 작동하기 때문에 아마도 처음이 아닐 수도 있습니다. 프로세스에 어떤 파일이 열려 있는지 살펴보면 2 또는 3이 가능성이 높습니다.
Doug-W

3
@ Doug-W 샌드 박스에서 작동하는 방식이 # 1을 어떻게 배제하는지 알 수 없습니다.
AttackingHobo

샌드 박스의 복잡성을 이해하지 못하면 포트가 샌드 박스 외부에 바인딩되어 있다는 사실이 포트 내부의 바인딩을 방해하지 않습니까? 아니면 샌드 박스가 내부에서 실행되는 각 프로그램에 대한 가상 인터페이스를 제공합니까?
Doug-W

@Vigil 내가 걱정하는 한, 당신은 하루 종일 Raymond Chen을 인용 할 수 있지만 그의 인용에 문법 오류를 추가하지 마십시오. : P (그냥 복사 / 대신에 붙여 넣습니다.)
hheimbuerger

4

나는 뮤텍스 접근법을 권장하지만,

자주 사용되는 다른 방법은 이름이 같은 다른 프로세스가 실행 중인지 확인하는 것입니다.

장점은 엄청나게 쉽다는 것입니다. 파일 권한에 대해 걱정하거나 뮤텍스가 무엇인지 알 필요가 없습니다. 단점은 다른 프로그램 starcraft2.exe이 컴퓨터에서 실행되고 있으면 오 탐지를 얻게 됩니다.


2
Hehe 또는 사용자가 프로그램 이름을 바꾸기로 결정한 경우.
Brandon

@Jonathan : 그런 다음 실행 파일 이름을 하드 코딩하지 마십시오 ...
BlueRaja-Danny Pflughoeft

1
사용자가 프로그램을 복사하고 이름을 바꾸고 두 번 실행하면 어떻게 될까요?
Brandon

3

C ++ 및 Windows API를 사용 FindWindow하는 경우 클래스 이름 및 / 또는 창 이름과 같은 매개 변수를 전달할 수있는을 사용하는 방법이 있습니다 . 그런 다음 일치하는 항목을 찾으면 창을로드하거나 작성하기 전에 프로그램을 종료하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.