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
[52464] [자답] 볼랜드 APPLICATION 윈도우즈 서비스 등록...
역삼골 [saonara] 1586 읽음    2008-02-28 17:43
볼랜드 APPLICATION에 윈도우즈 서비스 등록 관련 코드를 구현했더니
시작이 않되더군요.

윈도우스 서비스용 데몬 프로그램을 작성하신다면
File->New->Other->New->Service Application을 클릭하셔서
윈도우즈 서비스 프로젝트로 코딩을 하세요.

먼저
먼제 TService Properties를 설정하는데요.
Name에 서비스 명을 적어줍니다.
실제 서비스를 등록하면 레지스트리에 등록되는 이름이며 서비스 명입니다.
아래 소스는 Name = TempService로 했습니다.

DisplayName에는 관리도구->서비스를 실행하면 이름에 나타나는 이름입니다.
서비스 이름과는 틀립니다.
이부분 잘못적어서 인스톨/언인스톨 때 한참 해맸습니다. --;;
셈플로 DisplayName = Temp Service로 했습니다.

그리고 Interactive = true로 지정합니다.

셈플코드 올려드립니다.

//---------------------------------------------------------------------------
//Service Create Event
//---------------------------------------------------------------------------
void __fastcall TTempService::ServiceCreate(TObject *Sender)
{
    //Form Show 또는 Form Create 부분을 이부분에 코딩했습니다.
}

//---------------------------------------------------------------------------
//Service Destroy Event
//---------------------------------------------------------------------------
void __fastcall TTempService::ServiceDestroy(TObject *Sender)
{
   //Form Close 부분을 이부분에 코딩했습니다.
}

//---------------------------------------------------------------------------
//Service Start Event
//---------------------------------------------------------------------------
void __fastcall TTempService::ServiceStart(TService *Sender, bool &Started)
{
    //Service started set
    Started = true;
}

//---------------------------------------------------------------------------
//Service Stop Event
//---------------------------------------------------------------------------
void __fastcall TTempService::ServiceStop(TService *Sender, bool &Stopped)
{
    //Stopped Set
    Stopped = true;
}

//---------------------------------------------------------------------------
//Service execute Event
//---------------------------------------------------------------------------
void __fastcall TTempService::ServiceExecute(TService *Sender)
{
     //이 부분을 코딩안하면 Server Stop이 안되더군요.
     //한참 검색했습니다. --;;
     while (!Terminated)
    {
        ServiceThread->ProcessRequests(false);
        Sleep(10);
    }
}

//---------------------------------------------------------------------------
//Service continue Event
//---------------------------------------------------------------------------
void __fastcall TTempServiceS::ServiceContinue(TService *Sender,
      bool &Continued)
{
    //Service continued set
    Continued = true;
}

//---------------------------------------------------------------------------
//Occurs immediately after the service is registered with the Windows Service Control manager.
//---------------------------------------------------------------------------
void __fastcall TTempService::ServiceAfterInstall(TService *Sender)
{
try
{
    TRegistry *Reg = new TRegistry(KEY_ALL_ACCESS);
    String sImagePath = "";

    try
    {
        //RootKey Set
        Reg->RootKey = HKEY_LOCAL_MACHINE;

        //Service Description set
        if(Reg->OpenKey("SYSTEM\\CurrentControlSet\\Services\\TempService", true))
        {
            sImagePath = Reg->ReadString("ImagePath");
            Reg->WriteString("Description", "셈플 서비스 입니다."); //관리도구->서비스 실행하면 보이는 설명입니다.
            Reg->CreateKey("Parameters");
        }
        Reg->CloseKey();

        //Parameter set
        if(Reg->OpenKey("SYSTEM\\CurrentControlSet\\Services\\TempService\\Parameters", true))
        {
            Reg->WriteString("Application", sImagePath);
        }
        Reg->CloseKey();
    }
    __finally
    {
        delete Reg;
    }
}
//예외처리
__except(EXCEPTION_EXECUTE_HANDLER)
{
}
}

컴파일 하시면 실행파일이 생성됩니다.

이제 생성된 실행파일을 윈도우즈 서비스에 등록합니다.

DOS 창에서
C:>"C:\Temp\TempService.exe" /install "TempService"  (엔터)
합니다.
인스틀 완료했다는 메시지가 뜹니다.

실행에서 regedit를 실행합니다.
HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> Service 에 가시면
TempService가 보일거구요.
하위 키로 Parameters와 Security가 보일겁니다.

제어판 -> 관리도구 -> 서비스를 실행하시면
Temp Service가 보일겁니다.
속성을 보면
TempService라는 서비스명과
Temp Service라는 표시 이름과
셈플 서비스 입니다.라는 설명이 보이실겁니다.

시작,정지하면 잘되야합니다.

언인스톨을
DOS 창에서
C::>"C:\Temp\TempService.exe" /uninstall "TempService" (엔터)
하시면 서비스와 레지스트리에서 삭제됩니다.
삭제가 않되면 위 파라메터 설정중 뭐가 틀린겁니다.

이상입니다.
포럼과 구글에서 뒤져서 간신히 끝냈네요.
코드 양은 얼마 안되지만 내공부족으로 힘들게 했습니다.

도움이 되었으면 좋겠습니다.
그리고 항상 도움주시는 분들께 감사하다는 인사드립니다. ^^

잘못된 부분 있으면 지적해 주세요.
고치겠습니다.

즐거운 하루되세요.

+ -

관련 글 리스트
52464 [자답] 볼랜드 APPLICATION 윈도우즈 서비스 등록... 역삼골 1586 2008/02/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.