|
Windows Vista를 대비해서 이것 저것 테스트 하는 도중
두개 이상의 계정에서 저희 프로그램 (ezclick)을 중복 실행이 가능한 상황이 발생 했습니다.
A라는 계정에서 ezclick을 실행 시키고 난 다음에,
B라는 계정으로 사용자 전환을 한후 ezclick을 실행 시키면 실행이 됩니다. T_T
ezclick.cpp 에서 그러니깐 스타터업시
뮤텍스를 통해 중복 실행 방지 루틴이 들어가 있는데도 이렇게 나와서 당황 스럽기만 합니다.
뮤텍스를 통한 중복 실행 방지 루틴은 다음과 같습니다.
SECURITY_ATTRIBUTES secAttr;
char secDesc[ SECURITY_DESCRIPTOR_MIN_LENGTH ];
secAttr.nLength = sizeof(secAttr);
secAttr.bInheritHandle = FALSE;
secAttr.lpSecurityDescriptor = &secDesc;
InitializeSecurityDescriptor(secAttr.lpSecurityDescriptor, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(secAttr.lpSecurityDescriptor, TRUE, 0, FALSE);
const char ProgMutex[] = "ezClick";
HANDLE hMutex = NULL;
// HANDLE hMutex = CreateMutex(&secAttr, false, ProgMutex);
//
// if ( hMutex == NULL )
// return 0;
//
// //이미 인스턴스가 생성되어 있는경우.. 종료한다....
// if(ERROR_ALREADY_EXISTS == GetLastError())
// return 0;
if((hMutex=OpenMutex(MUTEX_ALL_ACCESS, false, ProgMutex))==NULL)
hMutex = CreateMutex(&secAttr, true, ProgMutex);
else{
MessageDlg("이미 실행중입니다.", mtError, TMsgDlgButtons() << mbOK, 0);
return 0;
한 계정에서의 중복 실행 방지는 정상 동작을 하는데,
여러 계정에서 중복 실행 방지는 안되는것 같습니다.
이걸 어떻게 해결해야 할런지 웹을 뒤지고 있지만 넘 어렵네요 T_T
|