안녕하세요.
제목 그대로 NT서비스 상태 체크를 해보려 하는데 어떤 것은 돼고
어떤 것은 안돼더라구요.
가령 NT서비스 중에 "Server"라는 항목은 현재 상태가 "시작" 돼어 있는데
체크를 해보면 죽어 있는 걸로 나오더라구요.
그런데 C++로 짠것은 똑같은 API함수를 썼는데 잘돼구요...
물론 제가 짠것은 아니고 어떤분이 제 델파이 소스를 보시고 똑같은 API함수를
썼다고 하더라구요.
물론 그분도 그런 현상이 나와서 API함수에서 받는 파라메타에 적정 메모리를
할당 해보니 잘 돼었다고 하길래 저역시 이것저것 해보았으나
역시 실패했습니다.
그래서 처음으로 이 곳 Q&A란에 글을 올리니 고수분들 보시고
꼭 답변 바랍니다.
아래는 NT서비스 상태 체크 소스 입니다.(델파이 팁에서 구함...)
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
function ServiceGetStatus(sMachine, sService: string ): DWord;
var
h_manager,h_svc: SC_Handle;
service_status : TServiceStatus;
hStat : DWord;
begin
hStat := 1;//죽어있을 경우
h_manager := OpenSCManager(PChar(sMachine) ,Nil, SC_MANAGER_CONNECT);
if h_manager > 0 then
begin
h_svc := OpenService(h_manager,PChar(sService), SERVICE_QUERY_STATUS);
if h_svc > 0 then
begin
if(QueryServiceStatus(h_svc, service_status)) then
hStat := service_status.dwCurrentState;
CloseServiceHandle(h_svc);
end;
CloseServiceHandle(h_manager);
end;
Result := hStat;
end;
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★