Visual C++의 한 인스턴스에 32 비트 응용 프로그램을 제한하는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 243953 - 이 문서가 적용되는 제품 보기.
참고 Visual C++ 2005, Microsoft Visual C++ .NET 2003, Microsoft Visual C++ .NET 2002 Microsoft .NET Framework에서 제공하는 관리되는 코드 모델과 관리되지 않는 네이티브 Microsoft Windows 코드 모델을 모두 지원합니다. 이 문서에 나와 있는 정보는 관리되지 않는 Visual C++ 코드에만 적용됩니다.
모두 확대 | 모두 축소

요약

이 문서에서는 한 인스턴스 응용 프로그램을 제한하는 방법을 설명합니다. 이 문서에서 사용되는 메서드는 창 만들 때 의존하지 않습니다. 따라서 이 메서드는 Visual C++에서 개발한 한 인스턴스 응용 프로그램을 제한하는 데 사용할 수 있습니다. 이 콘솔 응용 프로그램을, WinCE 응용 프로그램, 대화 상자 기반으로 응용 프로그램을, 그래픽 사용자 인터페이스 없이 응용 프로그램을 다른 응용 프로그램이 포함됩니다.

추가 정보

이 문서에서 사용되는 방법은 MSDN에 WinMain 항목 아래에 설명되어 있는 것입니다. 프로세스 간에 체크 인할 수 있는 명명된 뮤텍스를 만들 수 CreateMutex 함수를 사용합니다. 단일 인스턴스로 사용할 모든 응용 프로그램에 대해 동일한 코드를 복제하는 대신 있어야 하는 각 응용 프로그램에 걸쳐 다시 사용할 수 있는 C++ 래퍼 클래스의 코드입니다.

이 기능을 사용하려면 다음 이 단계를 수행하십시오.
  1. 이름을 사용하여 새 헤더 파일을 만들고 LimitSingleInstance.h, 다음 프로젝트에 추가합니다.
  2. LimitSingleInstance.h 파일에 다음 코드를 복사하고 파일을 저장합니다:
    #ifndef LimitSingleInstance_H
    #define LimitSingleInstance_H
    
    #include <windows.h> 
    
    //This code is from Q243953 in case you lose the article and wonder
    //where this code came from.
    class CLimitSingleInstance
    {
    protected:
      DWORD  m_dwLastError;
      HANDLE m_hMutex;
    
    public:
      CLimitSingleInstance(TCHAR *strMutexName)
      {
        //Make sure that you use a name that is unique for this application otherwise
        //two apps may think they are the same if they are using same name for
        //3rd parm to CreateMutex
        m_hMutex = CreateMutex(NULL, FALSE, strMutexName); //do early
        m_dwLastError = GetLastError(); //save for use later...
      }
       
      ~CLimitSingleInstance() 
      {
        if (m_hMutex)  //Do not forget to close handles.
        {
           CloseHandle(m_hMutex); //Do as late as possible.
           m_hMutex = NULL; //Good habit to be in.
        }
      }
    
      BOOL IsAnotherInstanceRunning() 
      {
        return (ERROR_ALREADY_EXISTS == m_dwLastError);
      }
    };
    #endif
    					
    노트 Visual C++ 2005 인 공용 언어 런타임 지원 컴파일러 옵션을 추가해야 합니다 (/clr:oldSyntax) 성공적으로 이전 코드 예제를 컴파일합니다. 공용 언어 런타임 지원 컴파일러 옵션을 추가하려면 다음과 같이 하십시오.
    1. 프로젝트 를 클릭한 다음 ProjectName 속성 을 클릭하십시오.

      참고ProjectName 프로젝트의 이름 자리 표시자입니다.
    2. 구성 속성 을 확장한 다음 일반 을 클릭하십시오.
    3. 오른쪽 창에서 선택한 공용 언어 런타임 지원, 이전 구문 (/clr:oldSyntax) 에서 공용 언어 런타임 지원 프로젝트 설정.
    4. 적용 을 누른 다음 확인 을 누릅니다.
    공용 언어 런타임 지원 컴파일러 옵션에 대한 자세한 내용은 다음 MSDN) Microsoft 개발자 네트워크 (웹 사이트를 방문하십시오.
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
  3. 프로그램의 진입점을 위치한 LimitSingleInstance.h 파일을 # include. 이 MFC 응용 프로그램에서 사용할 수 있으면 응용 프로그램의 InitInstance() 함수를 위치한 파일에 있습니다. Win32 SDK의 응용 프로그램, WinMain() 함수를 위치한 것입니다. 콘솔 응용 프로그램을 main() 함수에서 위치한 것이.
    #include "LimitSingleInstance.H"
    					
  4. 진입점 함수가 전에 CLimitSingleInstance 클래스의 전역 인스턴스를 만듭니다. MFC 응용 프로그램에서 사용 중인 경우 InitInstance() 함수 전에 인스턴스를 만듭니다.
  5. 고유한 이름을 전역 CLimitSingleInstance 인스턴스 생성자에 전달하십시오. 있도록 중복 검사를 수행할 때 이 문서에서는 사용하고 있거나 다른 응용 프로그램에서 충돌하지 않는 고유한 이름을 사용하는 것이 좋습니다. GUIDGEN 도구를 사용하여 쉽게 다른 사람이 사용할 고유한 이름을 가져올 수 있습니다. 도구를 액세스하려면 시작 을 누르고, 실행 을 및 GUIDGEN 입력하십시오. 어떤 이유로 도구가 설치되어 있지 않으면 MSDN 샘플에서 도구가 제공됩니다. 찾을 수 형식이 GUIDGEN MSDN 인덱스가 있습니다. GUIDGEN의 레지스트리 서식 옵션을 사용하는 것이 확인하십시오 도구를.
    #include "LimitSingleInstance.H"
    
    // The one and only CLimitSingleInstance object.
    // Change what is passed to constructor. GUIDGEN Tool may be of help.
    CLimitSingleInstance g_SingleInstanceObj(TEXT("Global\\{719967F0-DCC6-49b5-9C61-DE91175C3187}"));
    					
  6. 항목을 함수를 가리킨 CLimitSingleInstance 클래스의 전역 인스턴스를 IsAnotherInstanceRunning() 메서드를 호출하고 반환 값을 검사하십시오. 함수가 TRUE를 반환하면 진입점 함수를 반환하십시오. 그렇지 않은 경우 정상적인 실행을 계속하십시오.

    MFC 응용 프로그램에 다음과 비슷한 방법으로 있습니다:
    #include "LimitSingleInstance.H"
    
    // The one and only CLimitSingleInstance object.
    CLimitSingleInstance g_SingleInstanceObj(TEXT("Global\\{05CA3573-B449-4e0b-83F5-7FD612E378E9}"));
    
    BOOL CSingleInstDlg5App::InitInstance()
    {
        if (g_SingleInstanceObj.IsAnotherInstanceRunning())
           return FALSE; 
    
    //Rest of code.
    }
    						
    인 경우 콘솔 응용 프로그램을 사용하면 다음과 유사한 됩니다:
    #include "LimitSingleInstance.H"
    
    // The one and only CLimitSingleInstance object.
    CLimitSingleInstance g_SingleInstanceObj(TEXT("Global\\{9DA0BEED-7248-450a-B27C-C0409BDC377D}"));
    
    int main(int argc, char* argv[])
    {
        if (g_SingleInstanceObj.IsAnotherInstanceRunning())
           return 0;
    //Rest of code.
    }
    						
    인 경우 Win32 SDK 응용 이와 유사한 다음 작업을 수행할 수 있습니다:
    #include "LimitSingleInstance.H"
    
    // The one and only CLimitSingleInstance object.
    CLimitSingleInstance g_SingleInstanceObj(TEXT("Global\\{2194ABA1-BFFA-4e6b-8C26-D191BB16F9E6}"));
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int cmdShow)
    {
        if (g_SingleInstanceObj.IsAnotherInstanceRunning())
           return FALSE; 
    //Rest of code.
    }
    						
다음 이 단계를 둘 이상의 인스턴스가 동시에 활성 상태로 응용 프로그램을 허용하지 않습니다.

참고 터미널 서비스를 실행하는 경우 Global\ 터미널 서비스 세션 당 한 인스턴스를 보장합니다 추가하지 않습니다.
   CLimitSingleInstance g_SingleInstanceObj(TEXT("{719967F0-DCC6-49b5-9C61-DE91175C3187}"));
					
"Global\" 추가 컴퓨터에서 응용 프로그램 하나의 인스턴스만 있다는 것을 보장합니다. 또는 터미널 서비스를 실행 중인 여부를 이 적용됩니다.

참조

추가 정보는 다음 문서 번호를 클릭하여 Microsoft 기술 자료에서 확인하십시오:
238100WinCE 단일 인스턴스에서 32 비트 MFC SDI 응용 프로그램을 제한하는 방법

속성

기술 자료: 243953 - 마지막 검토: 2006년 1월 9일 월요일 - 수정: 7.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 4.2 Professional Edition
  • Microsoft Visual C++ 4.2 Enterprise Edition
  • Microsoft Visual C++ 4.1 Subscription
  • Microsoft Visual C++ 4.0 Standard Edition
키워드:?
kbmt kbinfo kbhowto kbuidesign KB243953 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com