2011-05-12 3 views
5

Windows에서 vs2005 C++을 사용하여 응용 프로그램을 개발하고 레지스트리 설정에서 수행 할 수있는 응용 프로그램에 파일 확장명을 연결하려고합니다. 그러나 파일을 클릭하면 실행중인 응용 프로그램 인스턴스와 연결하고 새 응용 프로그램을 시작하지 않습니다. 이 동작을 어떻게 수행 할 수 있습니까?실행중인 응용 프로그램에 파일 형식 연결

+0

+1. 좋은 질문. – Nawaz

답변

1

내 머리 위로 구현을 제공 할 수는 없지만 "프로세스 간 통신"(일반적으로 Windows를 사용하는 경우 COM 사용)을 조사합니다. 당신이 할 수있는 일은, 프로그램이 시작될 때, 다른 복사본을 찾는다는 것입니다. 발견하면 어떤 파일을 열 것인지를 알려주고 그 다음 스스로를 종료합니다.

나는 당신을 위해 구현을 발견 :이 사용

http://www.flounder.com/nomultiples.htm

1

가의 WinMain의 매개 변수를 수행하지만, 응용 프로그램의 이전 인스턴스에 msdn

핸들에서 할 수 있습니다. 이 매개 변수는 항상 NULL입니다. 다른 인스턴스가 이미 존재하는지 여부를 감지해야하는 경우 CreateMutex 함수를 사용하여 고유 한 이름의 뮤텍스를 만듭니다. 뮤텍스가 이미 존재하더라도 CreateMutex는 성공하지만 함수는 ERROR_ALREADY_EXISTS를 반환합니다. 이는 뮤텍스가 먼저 생성되었으므로 애플리케이션의 다른 인스턴스가 존재 함을 나타냅니다. 그러나 악성 사용자가 수행하기 전에이 뮤텍스를 만들어 응용 프로그램이 시작되지 못하게 할 수 있습니다. 이 상황을 방지하려면 무작위로 명명 된 뮤텍스를 생성하고 권한이 부여 된 사용자 만 가져올 수 있도록 이름을 저장하십시오. 또는이 목적으로 파일을 사용할 수 있습니다. 응용 프로그램을 사용자 당 하나의 인스턴스로 제한하려면 사용자의 프로파일 디렉토리에 잠긴 파일을 작성하십시오.

관련 문제