2 回答

TA貢獻1801條經(jīng)驗 獲得超8個贊
// NT服務(wù)程序的入口函數(shù)
void WINAPI ServiceMain(DWORD argc, LPSTR *argv)
{
//DWORD status;
//DWORD specificError;
// 注冊服務(wù)控制
SKServer*NTSObj;
NTSObj = (SKServer *)SKServerID;
ServiceStatusHandle = RegisterServiceCtrlHandlerA(NTSObj->NTSName, ServiceCtrlHandler);
ServiceStatus.dwServiceType= SERVICE_WIN32_OWN_PROCESS;
ServiceStatus.dwCurrentState= SERVICE_START_PENDING;
ServiceStatus.dwControlsAccepted= SERVICE_ACCEPT_STOP|SERVICE_ACCEPT_SHUTDOWN;
ServiceStatus.dwWin32ExitCode= 0;
ServiceStatus.dwServiceSpecificExitCode= 0;
ServiceStatus.dwCheckPoint= 0;
ServiceStatus.dwWaitHint= 0;
SetServiceStatus(ServiceStatusHandle, &ServiceStatus);
if(NTSObj->OnStart!=NULL){
NTSObj->OnStart();
}
ServiceStatus.dwCurrentState= SERVICE_RUNNING;
SetServiceStatus(ServiceStatusHandle, &ServiceStatus);
NTSObj->IsExit = FALSE;
while(!NTSObj->IsExit){
Sleep(100);
}
return;
}
// NT服務(wù)程序的服務(wù)控制處理函數(shù)
void WINAPI ServiceCtrlHandler(DWORD Opcode)
{
SKServer*NTSObj;
NTSObj = (SKServer *)SKServerID;
switch(Opcode){
case SERVICE_CONTROL_PAUSE:
if(NTSObj->OnPause!=NULL){
NTSObj->OnPause();
}
ServiceStatus.dwCurrentState = SERVICE_PAUSED;
SetServiceStatus(ServiceStatusHandle,&ServiceStatus);
break;
case SERVICE_CONTROL_CONTINUE:
if(NTSObj->OnStart!=NULL){
NTSObj->OnStart();
}
ServiceStatus.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus(ServiceStatusHandle,&ServiceStatus);
break;
case SERVICE_CONTROL_STOP:
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING;
ServiceStatus.dwCheckPoint = 0;
ServiceStatus.dwWaitHint = 0;
SetServiceStatus (ServiceStatusHandle,&ServiceStatus);
if(NTSObj->OnStop!=NULL){
NTSObj->OnStop();
}
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus(ServiceStatusHandle,&ServiceStatus);
NTSObj->IsExit=TRUE;
break;
case SERVICE_CONTROL_INTERROGATE:
break;
}
return;
}

TA貢獻1868條經(jīng)驗 獲得超4個贊
這個問題好復雜。
我也試過錯誤1053,后來發(fā)現(xiàn)是因為dll的路徑放錯了。因為系統(tǒng)服務(wù)的工作路徑在system32。
- 2 回答
- 0 關(guān)注
- 124 瀏覽
添加回答
舉報