撰写服务计划的主要功能

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

服务程序的主要功能是调用StartServiceCtrlDispatcher函数来连接到SCM并启动控制分派器线程。调度程序线程循环,等待调度表中指定的服务的传入控制请求。这个线程在出现错误或进程中的所有服务都已终止之前不返回。当进程中的所有服务终止时,SCM向调度程序线程发送一个控制请求,告诉它关闭。线程然后可以从StartServiceCtrlDispatcher调用返回,并且进程可以终止。

以下示例是仅支持一个服务的服务进程。它需要两个参数:一个字符串,可以包含一个格式化的输出字符和一个数字值用作格式化的字符。SvcDebugOut函数将信息消息和错误打印到调试器。

SERVICE_STATUS MyServiceStatus;

SERVICE_STATUS_HANDLE MyServiceStatusHandle;

VOID MyServiceStart (DWORD argc, LPTSTR *argv);

VOID MyServiceCtrlHandler (DWORD opcode);

DWORD MyServiceInitialization(DWORD argc,LPTSTR * argv,

DWORD *specificError);

VOID _CRTAPI1 main()

{

SERVICE_TABLE_ENTRY DispatchTable[] =

{

{TEXT(“MyService”),MyServiceStart},

{ NULL, NULL }

};

if(!StartServiceCtrlDispatcher(DispatchTable))

{

SvcDebugOut(" [MY_SERVICE] StartServiceCtrlDispatcher error =

%d\n", GetLastError());

}

}

VOID SvcDebugOut(LPSTR String,DWORD Status)

{

CHAR Buffer[1024];

if(strlen(String)< 1000)

{

sprintf(Buffer, String, Status);

OutputDebugStringA(Buffer);

}

}

如果您的服务程序支持多个服务,主要功能的实现将略有不同。附加服务的名称应该添加到dispatch表中,以便它们可以被调度程序线程监视。