애플리케이션을 단일 인스턴스로 강제 실행

애플리케이션을 단일 인스턴스로 강제 실행

Windows의 애플리케이션을 단일 인스턴스 애플리케이션으로 강제 설정할 수 있는 방법이 있습니까? 즉, 동일한 애플리케이션의 다른 인스턴스가 이미 실행 중인 경우 실행되지 않도록 할 수 있습니까?

이상적으로는 실제 애플리케이션을 스텁으로 교체할 필요 없이 이 작업을 수행할 수 있기를 원하지만 실제로 필요한 경우 스텁을 사용하는 것도 괜찮습니다.

답변1

일반적으로 "싱글톤" 기능을 애플리케이션에 바로 구현해야 합니다. "외부로부터" 보호하려면 이미 실행 중인 다른 인스턴스가 있는지 확인하는 래퍼를 사용해야 합니다. 이에 대한 더 많은 해결책이 있을 수 있지만 저는 한 번 다음과 같이 트릭을 수행했습니다.nsis. 아이디어는 다음과 같습니다.

  • 시작하려는 응용 프로그램을 둘러싼 작은 래퍼인 "가짜 설치 프로그램"을 만듭니다.
  • 해당 설치 프로그램을 싱글톤으로 만듭니다. 여기를 보아라하나의 설치 프로그램 인스턴스만 허용또는애플리케이션이 실행 중인지 확인하세요.
  • 해당 "래퍼 설치 프로그램"에서 응용 프로그램을 시작하십시오. 여기를 보아라ExecCmd 플러그인
  • 사용자에게 일반 애플리케이션 아이콘을 "숨기고" 가짜 설치 프로그램을 표시합니다. 보기 좋은 아이콘을 추가할 수 있기 때문에 원본 프로그램처럼 보이게 만들 수 있어야 합니다.

답변2

해결 방법이 없으면 다음을 사용하여 신청할 수 있습니다.애플리케이션 호환성 키트이를 가능하게 하는 것은 – 의심스럽습니다(그것 자체가 호환성을 깨뜨리는 종류는 아닙니다 1 ) – 그러면 Windows에는 설정이 없습니다.

시작 관리자 응용 프로그램 외에 다른 접근 방식은 새 프로세스(예: Win32_Process개체에 대한 WMI 인스턴스 생성 이벤트 – 물론 세션별로 필터링됨)를 모니터링하고 몇 가지 작업을 수행하여 두 번째 인스턴스를 차단하는 것입니다.


1 물론 애플리케이션이 지원되지 않는 메커니즘을 사용하여 자체의 여러 인스턴스를 감지하므로 감지 메커니즘에 shim이 필요한 경우 수정이 필요할 수 있습니다.

관련 정보