使用C语言编写windows服务一般框架
编写windows服务和编写windows应用程序一样,有一些回调函数必须填写且向windows 服务管理器(service manager)进行注册,否则会导致服务启动失败。因近期写个服务,其中遇到一些有问题,有部分内容想和大家分享一下,请大家指正。
windows服务一般框架代码如下:
#include <Windows.h>
#include <tchar.h>VOID WINAPI ServiceHandler(DWORD dwControl)
{
switch (dwControl)
{
case SERVICE_CONTROL_STOP:
{
ExitProcess(0);
}
break;
}
}
DWORD WINAPI ThreadFunc(PVOID pv)
{
Sleep(2*1000);
return TerminateProcess(GetCurrentProcess(),1);
}
VOID WINAPI ServiceMain(DWORD dwNumServicesArgs,PSTR *ppcServiceArgVectors)
{
SERVICE_STATUS_HANDLE hService = NULL;
//如果下面不初始化,导致service manager无法收到消息
SERVICE_STATUS SrvStatus = {0};
OutputDebugStringA("service main.....");
hService= RegisterServiceCtrlHandlerA("winservice",ServiceHandler);
SrvStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
SrvStatus.dwCurrentState= SERVICE_RUNNING;
//服务接受停止的控制,如果你不想让别人停止你的服务,下面这行代码可以删除
SrvStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
SetServiceStatus(hService,&SrvStatus);
//这句话也很重要,我刚开始就是没这句话,导致服务不能启动
CreateThread(0,0,ThreadFunc,0,0,0);//线程只是一个示例,2S后,服务启动后自动退出
return;
}
int _tmain(int argc, _TCHAR* argv[])
{
SERVICE_TABLE_ENTRYA scArrTable[] =
{
{"winservice",ServiceMain},
{NULL,NULL}
};
StartServiceCtrlDispatcherA(scArrTable);
return 0;
}
以上实例,仅供参考。
大家可以将编译后的exe使用如下命令行进行服务的注册:
sc create "windowsservice" binPath= "windowssrv.exe" //“binPath=”这个等于符号后有个空格,否则无法注册服务,请将windowssrv.exe改为你自己EXE所在全路径。
使用C语言编写windows服务一般框架的更多相关文章
- C语言编写Windows服务程序
原文:C语言编写Windows服务程序 #include <Windows.h> #include <stdio.h> #define SLEEP_TIME 5000 // 间 ...
- C#编写windows服务
项目要求: 数据库用有一张表,存放待下载文件的地址,服务需要轮训表将未下载的文件下载下来. 表结构如下: 过程: VS--文件-->新建项目-->windows-->windows服 ...
- C#编写Windows 服务
C#编写Windows 服务 Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时 ...
- python实现编写windows服务
使用python编写windows服务 最近测试服务器上经常发生磁盘空间不足,每次手动清除比较麻烦,所以写个windows服务定时清理下.中间也遇到过几个坑,一起记录下来. 1.python实现win ...
- C# 编写windows服务及服务的安装、启动、删除、定时执行任务
一.编写windows服务 1.VS2017 - 创建服务Myservice 2.创建好项目之后 --- >> 双击 Service1.cs ---- >> 出现一个设计 ...
- c# 编写windows 服务,并制作安装包
对服务的认识有很多个阶段. 第一阶段:当时还在用c++,知道在一个进程里while(True){},然后里面做很多很多事情,这就叫做服务了,界面可能当时还用Console控制台程序. 第二阶段:知道了 ...
- 用 C 语言编写 Windows 服务程序的五个步骤
Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务.为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳选择.本文将建立并实现一个简单的服务程序,其功能是查询系统 ...
- 用C语言编写Windows服务程序的五个步骤
Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务.为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳选择.本文将建立并实现一个简单的服务程序,其功能是查询系统 ...
- 手把手教用C#编写Windows服务 并控制服务 安装、启动、停止、卸载
Windows服务 Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动, ...
随机推荐
- POJ 2112 Optimal Milking (二分 + floyd + 网络流)
POJ 2112 Optimal Milking 链接:http://poj.org/problem?id=2112 题意:农场主John 将他的K(1≤K≤30)个挤奶器运到牧场,在那里有C(1≤C ...
- StackExchange.Redis 使用 (一)
在StackExchange.Redis中最重要的对象是ConnectionMultiplexer类, 它存在于StackExchange.Redis命名空间中.这个类隐藏了Redis服务的操作细节, ...
- Android 通过应用程序来设置系统的日期和时间中的
Android 通过应用程序来设置系统的日期和时间中的 android 2.3 android 4.0 测试可行,刚需ROOT权限. import java.io.DataOutputStream; ...
- SQL入门学习0-数据库与SQL
1.1 DBMS DatabaseManagermentSystem 数据库管理系统 DBMS种类 层次型数据库(HDB) 最古老的数据库之一,把数据通过层次结构的方式表现. 关系型数据库(RDB) ...
- c# 硬件开源神器netduino的开发中慎用Cpu.Pin
最近为了测试netduino开发板的各个端口是否正常使用,让同事写了一些测试程序,结果出了问题,他的测试程序导致开发板无法发布程序进去,按他的结论是开发板有问题,针对这个情况,我们经过仔细分析代码,认 ...
- schema for clojure
Schema for Clojure Data Shape Declaration and Validation 1.何为schema schema是描写叙述数据形式的一种clojure数据结构,可用 ...
- Oracle to_char,to_date
一.在oracle中,当想把字符串为‘2011-09-20 08:30:45’的格式转化为日期格式,我们可以使用oracle提供的to_date函数. sql语句为: SELECT to_date(' ...
- Down to the TLP: How PCI express devices talk (Part I)
http://xillybus.com/tutorials/pci-express-tlp-pcie-primer-tutorial-guide-1 Down to the TLP: How PCI ...
- (大数据工程师学习路径)第一步 Linux 基础入门----Linux 下软件安装
介绍 介绍 Ubuntu 下软件安装的几种方式,及 apt,dpkg 工具的使用. 一.Linux 上的软件安装 通常 Linux 上的软件安装主要有三种方式: 在线安装 从磁盘安装deb软件包 从二 ...
- 解决cocos2d-x-3.1.1新androidproject
下了个cocos2d-x-3.1.1,依照官方文档一步步配置win7下cocos2d-x-3.1.1的android开发环境,结果没有找到create_project.py这个文件.. 现将具体配置步 ...