|
볼랜드 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" (엔터)
하시면 서비스와 레지스트리에서 삭제됩니다.
삭제가 않되면 위 파라메터 설정중 뭐가 틀린겁니다.
이상입니다.
포럼과 구글에서 뒤져서 간신히 끝냈네요.
코드 양은 얼마 안되지만 내공부족으로 힘들게 했습니다.
도움이 되었으면 좋겠습니다.
그리고 항상 도움주시는 분들께 감사하다는 인사드립니다. ^^
잘못된 부분 있으면 지적해 주세요.
고치겠습니다.
즐거운 하루되세요.
|