C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[48894] [만해] Windows Vista에서 Mutex 문제
강재호.만해 [greenuri] 1520 읽음    2007-04-11 12:13
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

+ -

관련 글 리스트
48894 [만해] Windows Vista에서 Mutex 문제 강재호.만해 1520 2007/04/11
48941     Re:[만해] Windows Vista에서 Mutex 문제 김호광 1416 2007/04/14
48946         Re:Re:[만해] Windows Vista에서 Mutex 문제 강재호.만해 1326 2007/04/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.