C服务程序模板
在DoWork中添加自己的代码。
服务安装: sc create srvdemo binpath= "F:\srvdemo.exe"
服务启动:sc start srvdemo 参数1 参数2 //net start方式不支持参数
服务停止:sc/net stop srvdemo
服务删除:sc delete srvdemo
其他命令:sc description srvdemo "服务描述" //添加服务描述
#include <windows.h>
CHAR SrvName[] = "SrvDemo";
SERVICE_STATUS g_hStatusService;
SERVICE_STATUS_HANDLE g_hStatusHandle;
VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv);
VOID WINAPI ServiceHandler(DWORD fdwControl);
DWORD DoInitialize(DWORD dwArgc, LPTSTR *lpszArgv);
VOID DoWork(DWORD dwArgc, LPTSTR *lpszArgv);
int main(int argc, char** argv)
{
SERVICE_TABLE_ENTRY ServiceTable[2];
ServiceTable[0].lpServiceName = SrvName;
ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;
ServiceTable[1].lpServiceName = NULL;
ServiceTable[1].lpServiceProc = NULL;
StartServiceCtrlDispatcher(ServiceTable);
return 0;
}
//服务控制处理函数
VOID WINAPI ServiceHandler(DWORD fdwControl)
{
switch (fdwControl)
{
case SERVICE_CONTROL_PAUSE:
g_hStatusService.dwCurrentState = SERVICE_PAUSED;
break;
case SERVICE_CONTROL_CONTINUE:
g_hStatusService.dwCurrentState = SERVICE_RUNNING;
break;
case SERVICE_CONTROL_STOP:
case SERVICE_CONTROL_SHUTDOWN:
g_hStatusService.dwCurrentState = SERVICE_STOPPED;
g_hStatusService.dwWin32ExitCode = 0;
g_hStatusService.dwCheckPoint = 0;
g_hStatusService.dwWaitHint = 0;
SetServiceStatus(g_hStatusHandle, &g_hStatusService);
return;
case SERVICE_CONTROL_INTERROGATE:
break;
default:
break;
}
SetServiceStatus(g_hStatusHandle, &g_hStatusService);
return;
}
//服务主函数
VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv)
{
g_hStatusHandle = RegisterServiceCtrlHandler(SrvName,
(LPHANDLER_FUNCTION)ServiceHandler);
if (g_hStatusHandle == NULL)
return;
// 设置一些参数
g_hStatusService.dwServiceType = SERVICE_WIN32;
g_hStatusService.dwCurrentState = SERVICE_START_PENDING;
g_hStatusService.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PAUSE_CONTINUE;
g_hStatusService.dwWin32ExitCode = 0;
g_hStatusService.dwServiceSpecificExitCode = 0;
g_hStatusService.dwCheckPoint = 0;
g_hStatusService.dwWaitHint = 0;
SetServiceStatus(g_hStatusHandle, &g_hStatusService);
// 初始化操作
DWORD dwRet = DoInitialize(dwArgc, lpszArgv);
if (dwRet != NO_ERROR)
{
g_hStatusService.dwCurrentState = SERVICE_STOPPED;
g_hStatusService.dwWin32ExitCode = dwRet;
SetServiceStatus(g_hStatusHandle, &g_hStatusService);
return;
}
// 初始化结束,报告运行状态
g_hStatusService.dwCurrentState = SERVICE_RUNNING;
g_hStatusService.dwCheckPoint = 0;
g_hStatusService.dwWaitHint = 0;
SetServiceStatus(g_hStatusHandle, &g_hStatusService);
//在这里做其他的工作
DoWork(dwArgc, lpszArgv);
}
// 执行一些初始化过程
DWORD DoInitialize(DWORD dwArgc, LPTSTR *lpszArgv)
{
return NO_ERROR;
}
VOID DoWork(DWORD dwArgc, LPTSTR *lpszArgv)
{
// lpszArgv[1]是参数1
if (dwArgc == 1)
{
return;
}
else if (dwArgc == 2)
{
srvlog("lpszArgv[1]: %s\n", lpszArgv[1]);
return;
}
else if (dwArgc == 3)
{
}
}
浙公网安备 33010602011771号