C编写Windows服务程序学习
来源:互联网 发布:天津seo公司 编辑:程序博客网 时间:2024/04/29 19:32
本文主要讲述Windows服务程序的编写,分享完整代码,初学者可以直接编译通过,并查看结果,基本知识及步骤读者可以参考网络中其他文章。下面是Windows服务程序的全部代码,最后是安装服务。
#include <windows.h>
#include <stdio.h>
#define SLEEP_TIME 5000
#define LOGFILE "E:\\myservice.txt"
#define SERVICE_NAME "MYSERVICE"
SERVICE_STATUS ServiceStatus; //服务状态
SERVICE_STATUS_HANDLE hStatus; //服务状态句柄
void WINAPI ServiceMain(int argc, char **argv); //服务主程序
void WINAPI ControlHandler(DWORD request); //服务控制程序
boolean running = TRUE;
int WriteToLog(char *str)
{
FILE *log;
fopen_s(&log,LOGFILE, "a+");
if (log == NULL)
{
return -1;
}
fprintf_s(log, "%s\n", str);
fclose(log);
return 0;
}
void WINAPI ServiceMain(int argc, char **argv)
{
WriteToLog("Monitoring started.");
ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_STOP;
//在本例中只接受系统关机和停止服务两种控制命令
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwWaitHint = 0;
ServiceStatus.dwCheckPoint = 0;
ServiceStatus.dwServiceSpecificExitCode = 0;
//注册服务控制处理函数
hStatus = RegisterServiceCtrlHandler(SERVICE_NAME, ControlHandler);
//如果注册失败
if (!hStatus)
{
WriteToLog("RegisterServiceCtrlHandler failed");
return;
}
WriteToLog("RegisterServiceCtrlHandler success");
//向SCM 报告运行状态
ServiceStatus.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus(hStatus, &ServiceStatus);
//下面就开始任务循环了,你可以添加你自己希望服务做的工作
char str[80] = { 0 };
while (running)
{
strcpy_s(str,80,"this is a test");
Sleep(1000);
WriteToLog(str);
}
WriteToLog("service stopped");
}
void WINAPI ControlHandler(DWORD request)
{
switch (request)
{
case SERVICE_CONTROL_STOP:
running = FALSE;
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
WriteToLog("service stopped");
break;
case SERVICE_CONTROL_SHUTDOWN:
running = FALSE;
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
WriteToLog("service shutdown");
break;
default:
break;
}
SetServiceStatus(hStatus, &ServiceStatus);
}
int main()
{
SERVICE_TABLE_ENTRY ServiceTable[] = { { SERVICE_NAME, (LPSERVICE_MAIN_FUNCTION)ServiceMain }, { NULL, NULL } };
// 启动服务的控制分派机线程
StartServiceCtrlDispatcher(ServiceTable);
return 0;
}
2.安装Windows服务
由于本机用户权限问题,我建立了4个bat文件,分别是Install.bat(创建服务命令),Uninstall.bat(卸载服务命令,重启有效),Start.bat(启动服务命令),Stop.bat(停止服务命令),4个bat文件对应下面4个命令:sc create myserve binpath= E:\MyService\Debug\MyService.exe(exe文件地址);sc delete myserve;sc start myserve;sc stop myserve,用户可以鼠标右键选择以管理员身份运行,这样可以解决权限问题。
- C编写Windows服务程序学习
- C语言编写Windows服务程序。
- 用C语言编写Windows服务程序
- C编写Windows服务程序详细介绍
- 用 C 语言编写 Windows 服务程序
- 用C语言编写Windows服务程序
- C编写Windows服务程序详细介绍
- C语言编写Windows服务程序
- 用C编写Windows服务程序
- C语言编写Windows服务程序
- 用C语言编写windows服务程序
- C语言Windows服务程序编写-ServiceMain
- 编写 Windows 服务程序
- windows 服务程序编写
- Windows服务程序编写
- Windows服务程序编写
- 编写windows服务程序
- windows服务程序编写
- overthewire朝花夕拾
- git命令
- Linux ubuntu 中grub rescue问题
- 关于虚拟主机类网站优化的一些测试实验
- Maven实战——Maven入门
- C编写Windows服务程序学习
- JavaScript-JavaScript 语句\
- ZjDroid--脱壳神器介绍
- 使用ant实现自动化示例
- 矩阵中求子矩形
- popupWindow焦点问题以及实现根据输入内容筛选列表功能
- 【PAT 乙级(Basic Level)】A+B和C
- nodejs npm包管理常用命令介绍
- SpringMVC REST ful API