DWORD StartSampleService()
{
; ; SERVICE_STATUS ssStatus;
; ; DWORD dwOldCheckPoint;
; ; DWORD dwStartTickCount;
; ; DWORD dwWaitTime;
; ; DWORD dwStatus;
;
; ; schService = OpenService(
; ; ; ; schSCManager, ; ; ; ; ;// SCM database
; ; ; ; "Sample_Srv", ; ; ; ; ;// service name
; ; ; ; SERVICE_ALL_ACCESS);
;
; ; if (schService == NULL)
; ; {
; ; ; ; MyErrorExit("OpenService");
; ; }
;
; ; if (!StartService(
; ; ; ; ; ; schService, ;// handle to service
; ; ; ; ; ; 0, ; ; ; ; ; // number of arguments
; ; ; ; ; ; NULL) ) ; ; ;// no arguments
; ; {
; ; ; ; MyErrorExit("StartService");
; ; }
; ; else
; ; {
; ; ; ; printf("Service start pending./n");
; ; }
;
; ; // Check the status until the service is no longer start pending.
;
; ; if (!QueryServiceStatus(
; ; ; ; ; ; schService, ; // handle to service
; ; ; ; ; ; &ssStatus) ) ;// address of status information structure
; ; {
; ; ; ; MyErrorExit("QueryServiceStatus");
; ; }
;
; ; // Save the tick count and initial checkpoint.
; ; dwStartTickCount = GetTickCount();
; ; dwOldCheckPoint = ssStatus.dwCheckPoint;
; ; while (ssStatus.dwCurrentState == SERVICE_START_PENDING)
; ; {
; ; ; ; // Do not wait longer than the wait hint. A good interval is
; ; ; ; // one tenth the wait hint, but no less than 1 second and no
; ; ; ; // more than 10 seconds.
;
; ; ; ; dwWaitTime = ssStatus.dwWaitHint / 10;
; ; ; ; if( dwWaitTime < 1000 )
; ; ; ; ; ; dwWaitTime = 1000;
; ; ; ; else if ( dwWaitTime > 10000 )
; ; ; ; ; ; dwWaitTime = 10000;
; ; ; ; Sleep( dwWaitTime );
; ; ; ; // Check the status again.
;
; ; ; ; if (!QueryServiceStatus(
; ; ; ; ; ; ; ; schService, ; // handle to service
; ; ; ; ; ; ; ; &ssStatus) ) ;// address of structure
; ; ; ; ; ; break;
;
; ; ; ; if ( ssStatus.dwCheckPoint > dwOldCheckPoint )
; ; ; ; {
; ; ; ; ; ; // The service is making progress.
; ; ; ; ; ; dwStartTickCount = GetTickCount():
; ; ; ; ; ; dwOldCheckPoint = ssStatus.dwCheckPoint;
; ; ; ; }
; ; ; ; else
; ; ; ; {
; ; ; ; ; ; if(GetTickCount()-dwStartTickCount > ssStatus.dwWaitHint)
; ; ; ; ; ; {
; ; ; ; ; ; ; ; // No progress made within the wait hint
; ; ; ; ; ; ; ; break;
; ; ; ; ; ; }
; ; ; ; }
; ; }
; ; if (ssStatus.dwCurrentState == SERVICE_RUNNING)
; ; {
; ; ; ; printf("StartService SUCCESS./n");
; ; ; ; dwStatus = NO_ERROR;
; ; }
; ; else
; ; {
; ; ; ; printf("/nService not started. /n");
; ; ; ; printf(" ;Current State: %d/n", ssStatus.dwCurrentState);
; ; ; ; printf(" ;Exit Code: %d/n", ssStatus.dwWin32ExitCode);
; ; ; ; printf(" ;Service Specific Exit Code: %d/n",
; ; ; ; ; ; ssStatus.dwServiceSpecificExitCode);
; ; ; ; printf(" ;Check Point: %d/n", ssStatus.dwCheckPoint);
; ; ; ; printf(" ;Wait Hint: %d/n", ssStatus.dwWaitHint);
; ; ; ; dwStatus = GetLastError();
; ; }
;
; ; CloseServiceHandle(schService);
; ; return dwStatus;
}
从《MSDN》贴了一段,高手来谈谈!我不太理解!改成Delphi该怎么写呢!