설치 시 클래스 등록
대부분의 애플리케이션처럼 언제든지 클라이언트에서 클래스를 사용할 수 있도록 하는 경우 일반적으로 설치 및 설치 프로그램을 통해 등록합니다. 즉, 개체를 인스턴스화하는 방법 및 위치를 포함하여 애플리케이션에 대한 정보를 레지스트리에 배치합니다. 이 정보는 모든 CLSID에 대해 등록해야 합니다. 다른 정보는 선택 사항입니다. Regsvr32와 같은 도구를 사용하면 설치 시 서버를 등록하는 설치 프로그램을 간단하게 작성할 수 있습니다.
시스템 기본값을 사용하지 않는 경우 레지스트리에는 CLSID 및 AppID라는 두 가지 중요한 키가 있습니다. 이러한 키 아래의 중요한 정보 중에는 개체를 인스턴스화하는 방법이 있습니다. 개체는 in-process, out-of-process local 또는 out-of-process remote로 지정할 수 있습니다.
AppID 키 아래에는 해당 애플리케이션과 관련된 정보를 정의하는 몇 가지 값이 있습니다. 이 중에는 RemoteServerName 및 ActivateAtStorage가 있으며, 둘 다 클라이언트가 개체를 만들 수 있도록 허용하는 데 사용할 수 있으며 클라이언트는 서버 위치에 대한 기본 제공 지식이 없습니다. 원격 인스턴스화에 대한 자세한 내용은 원격 개체 찾기 및 인스턴스 만들기 도우미 함수를 참조하세요.
서버를 서비스로 설치하거나 특정 사용자 계정으로 실행할 수도 있습니다. 자세한 내용은 서비스 애플리케이션으로 설치를 참조하세요.
서비스가 아니거나 특정 사용자 계정으로 실행되는 서버 또는 ROT 개체를 "활성화자" 서버라고 할 수 있습니다. 이러한 서버의 경우 클라이언트의 보안 컨텍스트 및 창 스테이션/데스크톱이 서버와 일치해야 합니다. 원격 서버에 연결하려는 클라이언트는 NULL 창 스테이션/데스크톱이 있는 것으로 간주되므로 이 instance 서버 보안 컨텍스트만 비교됩니다. (SID에 대한 자세한 내용은 COM의 보안을 참조하세요.) COM은 프로세스가 분산 COM 서비스에 처음 연결될 때 프로세스의 창 스테이션/데스크톱을 캐시합니다. 따라서 COM 클라이언트와 서버는 CoInitialize 또는 CoInitializeEx를 호출한 후 프로세스의 창 스테이션 또는 스레드 데스크톱을 변경해서는 안 됩니다.
클래스가 in-process로 등록되면 클래스 개체를 만들기 위한 CoGetClassObject 호출이 COM에서 DllGetClassObject 함수에 자동으로 전달되며, 호출 개체에 클래스 개체에 대한 포인터를 제공하기 위해 클래스가 구현해야 합니다.
실행 파일에서 구현된 클래스는 COM이 해당 프로세스를 실행하고 CoRegisterClassObject 함수에 대한 호출을 통해 해당 클래스 개체의 IClassFactory 인터페이스를 등록할 때까지 대기하도록 지정할 수 있습니다.
관련 항목