您的位置:首页 > 编程语言

控制台程序转成windows 服务简单的辅助代码

2008-10-21 17:42 459 查看
#ifndef daemon_h
#define daemon_h
#include <windows.h>

static SERVICE_STATUS daemon_status;;
static SERVICE_STATUS_HANDLE daemon_handle;
static DWORD deamon_argc;
static char** daemon_argv;
extern const char* daemon_name;

static void WINAPI daemon_ctrl(DWORD dwControl){
switch (dwControl){
case SERVICE_CONTROL_PAUSE:
daemon_status.dwCurrentState = SERVICE_PAUSE_PENDING;
SetServiceStatus(daemon_handle, &daemon_status);
daemon_status.dwCurrentState = SERVICE_PAUSED;
break;

case SERVICE_CONTROL_CONTINUE:
daemon_status.dwCurrentState = SERVICE_CONTINUE_PENDING;
SetServiceStatus(daemon_handle, &daemon_status);
daemon_status.dwCurrentState = SERVICE_RUNNING;
break;

case SERVICE_CONTROL_STOP:
daemon_status.dwCurrentState = SERVICE_STOP_PENDING;
SetServiceStatus(daemon_handle, &daemon_status);
daemon_status.dwCurrentState = SERVICE_STOPPED;
break;

case SERVICE_CONTROL_SHUTDOWN:
break;

case SERVICE_CONTROL_INTERROGATE:
daemon_status.dwCurrentState = SERVICE_RUNNING;
break;
}
SetServiceStatus(daemon_handle, &daemon_status);
}

static int daemon_initialize(){
daemon_status.dwServiceType = SERVICE_WIN32;
daemon_status.dwCurrentState = SERVICE_START_PENDING;
daemon_status.dwControlsAccepted = SERVICE_ACCEPT_STOP;
daemon_status.dwWin32ExitCode = 0;
daemon_status.dwServiceSpecificExitCode = 0;
daemon_status.dwCheckPoint = 0;
daemon_status.dwWaitHint = 0;

daemon_handle = RegisterServiceCtrlHandler(daemon_name, daemon_ctrl);
if(daemon_handle == 0){
return -1;
}

daemon_status.dwCheckPoint = 0;
daemon_status.dwWaitHint = 0;
daemon_status.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus(daemon_handle, &daemon_status);

return 0;
}

#define main /
main(int argc, char* argv[]){ /
deamon_argc = argc; /
daemon_argv = argv; /
void WINAPI daemon_wrapper(DWORD argc, char* argv[]); /
SERVICE_TABLE_ENTRY service_table_entry[] = /
{ /
{(char *) daemon_name, daemon_wrapper}, /
{0, 0} /
}; /
StartServiceCtrlDispatcher(service_table_entry); /
} /
/
void WINAPI daemon_wrapper(DWORD argc, char* argv[]){ /
if(-1 == daemon_initialize()){ /
return; /
} /
extern int daemon_main(int argc, char* argv[]); /
daemon_main((int) deamon_argc, daemon_argv); /
} /
int daemon_main

#endif
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: