2014-03-12 2 views
0

첫 번째 COM 서비스 EXE를 프로그래밍하려고합니다. 그리고 인터넷에서 정보를 찾을 수 없습니다.COM 서비스에서 EXE가 시작되었습니다.

서비스 EXE는 해당 Run() 메서드에서 실행되기 시작합니다. 서비스 기능을 얻으려면 내 주요 기능을 구현해야합니까? 아니면 관련된 특정 기능을 구현해야합니까?

정말 고마워요 !!

+0

COM 개체를이 서비스의 주요 지점으로 제공하고 있습니까? 그렇다면, in-proc COM 서버 (즉, DLL)를 구현하고 COM + 내에서 실행하는 것이 좋습니다. 훨씬 쉽습니다. –

답변

0

C++과 ATL을 사용한다고 명시하지 않았지만 질문에 제공된 태그에서 추측 할 수 있습니다.

COM 개체에 전역 초기화가 필요하지 않으면 제공된 Run() 함수 또는 이와 유사한 함수를 수정할 필요가 없습니다. 다음과 같이 작동합니다. 서비스가 실행되고 있지 않고 일부 프로그램에서 서비스의 COM 개체를 만들어야하는 경우 COM/DCOM 인프라가 먼저 서비스를 시작합니다. 또는 표준 방법 (예 : 수동 또는 시작 유형을 자동으로 설정)을 사용하여 서비스를 미리 시작할 수 있습니다. 서비스가 실행되면 COM 개체가 서비스 내에 만들어집니다.

따라서 전역 초기화를 추가 할 필요없이 COM 개체를 모든 로컬 서버 또는 in-process 서버에서 구현하기 만하면됩니다. 인스턴스 초기화가 필요한 경우에는 COM 객체의 생성자 또는 FinalConstruct 메서드에이 인스턴스를 삽입합니다 (이 메서드는 생성자 다음에 호출되므로 객체가 이미 존재한다는 사실을 활용할 수 있습니다. 또한 필요한 경우 FinalConstruct가 HRESULT를 반환하므로 실패합니다.

전역 (서비스 전체) 초기화 코드가 필요한 경우 서비스 설계의 다른 단계에 각각 여러 위치에 배치 할 수 있습니다. 그런 장소 중 하나가 Run() 메소드가 될 것입니다.

+0

정보가 충분하다면 죄송합니다. 사실, 나는 ATL을 사용하여 Service EXE를 구현하려고한다. 이 서비스는 컴퓨터의 시작 부분에서 실행하고 루프에서 기본 프로세스를 실행해야합니다. 그러면 주 프로세스를 Run() 메서드에 구현하기 만하면됩니까? FinalConstruct 메서드와 COM 개체의 생성자에 대한 설명을 이해할 수 없습니다. 어디에서 찾을 수 있습니까? 또는 어떻게 추가합니까? – ABCmo

+0

"ATL Project"마법사를 사용하여 Windows 서비스를 구현하는 것으로 선택되었지만 실제로는 COM 개체를 구현할 필요가 없습니다 (원래 질문과는 다소 차이가 있음). 대답이 주어지기 전에이를 명확히해야합니다. – ZbynekZ