启动服务

【勇芳软件工作室】汉化HomePreviousNext

要启动服务,以下示例打开已安装数据库的句柄,然后指定调用StartService函数中的句柄。它可用于启动服务或驱动程序服务,但此示例假定服务正在启动。开始服务后,程序将使用QueryServiceStatus函数返回的SERVICE_STATUS结构的成员来跟踪服务的进度。

VOID StartSampleService()

{

SERVICE_STATUS ssStatus;

DWORD dwOldCheckPoint;

schService = OpenService(

schSCManager, // SCM数据库

TEXT("Sample_Srv"), // 服务名称

SERVICE_ALL_ACCESS);

if (schService == NULL)

MyErrorExit("OpenService");

if(!StartService(

schService, //处理服务

0, //参数数量

NULL) ) //没有参数

{

MyErrorExit("StartService");

}

其他

printf("Service start pending\n");

//检查状态,直到服务运行。

if(!QueryServiceStatus(

schService, //处理服务

&ssStatus) ) //状态信息的地址

MyErrorExit("QueryServiceStatus");

while (ssStatus.dwCurrentState != SERVICE_RUNNING)

{

//保存当前检查点。

dwOldCheckPoint = ssStatus.dwCheckPoint;

//等待指定的间隔。

Sleep(ssStatus.dwWaitHint);

//再次检查状态。

if(!QueryServiceStatus(

schService, //处理服务

&ssStatus) ) //状态信息的地址

break;

//如果检查点未增加,则中断。

if (dwOldCheckPoint >= ssStatus.dwCheckPoint)

break;

}

if (ssStatus.dwCurrentState == SERVICE_RUNNING)

printf("StartService SUCCESS\n");

其他

{

printf("\nService not started: \n");

printf(“当前状态:%d \\ n”,

ssStatus.dwCurrentState);

printf(" Exit Code: %d\n", ssStatus.dwWin32ExitCode);

printf(“服务特定退出代码:%d \\ n”,

ssStatus.dwServiceSpecificExitCode);

printf(" Check Point: %d\n", ssStatus.dwCheckPoint);

printf(" Wait Hint: %d\n", ssStatus.dwWaitHint);

}

CloseServiceHandle(schService);

}