서비스 애플리케이션으로 설치

EXE(로컬 서버 실행 파일)로 실행하는 것 외에도 COM 개체는 로컬 또는 원격 클라이언트에서 활성화될 때 서비스 애플리케이션으로 실행되도록 자체적으로 패키지할 수도 있습니다. 서비스는 로컬 및 원격 시작, 중지, 일시 중지 및 다시 시작뿐만 아니라 특정 사용자 계정창 스테이션에서 실행할 서버를 설정하는 기능을 포함하여 다양한 유용하고 사용자 인터페이스가 통합된 관리 기능을 지원합니다.

AppID 키 아래에 LocalService 값을 설정하고 표준 서비스 설치를 수행하여 COM에서 사용할 수 있는 서비스로 작성된 개체가 설치됩니다.

서비스 애플리케이션으로 작성되지 않고 원격 클라이언트에서 활성화할 때 특정 사용자 계정으로 실행되도록 클래스를 구성할 수도 있습니다. 이를 위해 클래스는 SCM이 로컬 서버 프로세스를 시작하는 경우 사용할 사용자 이름과 암호를 설치합니다.

이러한 방식으로 클래스를 구성하면 실제 활성화 요청을 대신하여 COM에서 프로세스를 시작하지 않으면 이 CLSID를 사용하여 CoRegisterClassObject 에 대한 호출이 실패합니다. 즉, 특정 사용자로 실행되도록 구성된 클래스는 다른 ID로 등록되지 않을 수 있습니다.

사용자 이름은 클래스의 APPID 키 아래에 있는 RunA 명명된 값에서 가져옵니다. 사용자 이름이 "대화형 사용자"인 경우 클래스 코드는 현재 로그온한 사용자의 보안 컨텍스트에서 실행되며 대화형 창 스테이션에 연결됩니다.

그렇지 않으면 컴퓨터의 관리자와 시스템에서만 사용할 수 있는 레지스트리의 숨겨진 부분에서 암호가 검색됩니다. 그런 다음 사용자 이름과 암호를 사용하여 클래스 코드가 실행되는 로그온 세션을 만듭니다. 이러한 방식으로 시작하면 클래스 코드는 자체 데스크톱 및 창 스테이션에서 실행되며 대화형 사용자 또는 다른 사용자 계정에서 실행되는 다른 클래스와 창 핸들, 클립보드 또는 기타 사용자 인터페이스 요소를 공유하지 않습니다.

LocalService 또는 RunAs에 등록된 서버는 실행 중인 개체 테이블에 개체를 등록하여 모든 클라이언트가 연결할 수 있도록 할 수 있습니다. 이렇게 하려면 서버의 IRunningObjectTable::Register 호출에서 ROTFLAGS_ALLOWANYCLIENT 플래그를 설정해야 합니다. 이 비트를 설정하는 서버는 실행 파일에 대한 AppID를 참조하는 레지스트리의 AppID 섹션에 실행 파일 이름이 있어야 합니다. "activator로 활성화" 서버( LocalService 또는 RunAs로 등록되지 않음)는 이 플래그를 사용하여 개체를 등록할 수 없습니다.

설치 시 클래스 등록

실행 중인 EXE 서버 등록

ROT에 개체 등록

자체 등록