在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)
{
}
}

  

C服务程序模板的更多相关文章

  1. java模板和回调机制学习总结

    最近看spring的JDBCTemplete的模板方式调用时,对模板和回调产生了浓厚兴趣,查询了一些资料,做一些总结. 回调函数: 所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个 ...

  2. .net Windows服务程序和安装程序制作图解 及 VS 2010创建、安装、调试 windows服务(windows service)

    .net Windows服务程序和安装程序制作 最近项目中用到window服务程序,以前没接触过,比较陌生,花了两天的时间学习了下,写了个简单的服务,但在制作安装程序的时候,参照网上很多资料,却都制作 ...

  3. .net Windows服务程序和安装程序制作图解

    最近项目中用到window服务程序,以前没接触过,比较陌生,花了两天的时间学习了下,写了个简单的服务,但在制作安装程序的时候,参照网上很多资料,却都制作不成功,可能是开发环境或项目配置的不同,这里把自 ...

  4. 服务程序在c#中的写法

    1.在VS.NET2003中新建一个WINDOWS服务程序的项目WinSrv_A. 2.更改SERVICE1.CS属性SERVICENAME为你所要建立的服务名称,在服务管理器->名称中你可以看 ...

  5. Cookiecutter: 更好的项目模板工具:(1)简介及可用资源汇总

    原文档地址:https://cookiecutter.readthedocs.io/en/latest/ 本系列只介绍cookiecutter的基础使用,而且会删除与功能使用无关的部分.深度使用及了解 ...

  6. java程序在windows系统作为服务程序运行

    Java程序很多情况下是作为服务程序运行的,在Un*x 平台下可以利用在命令后加“&”把程序作为后台服务运行,但在Windows下看作那个Console窗口在桌面上,你是否一直担心别的同时把你 ...

  7. .NET 跨平台RPC框架DotNettyRPC Web后台快速开发框架(.NET Core) EasyWcf------无需配置,无需引用,动态绑定,轻松使用 C# .NET 0配置使用Wcf(半成品) C# .NET Socket 简单实用框架 C# .NET 0命令行安装Windows服务程序

    .NET 跨平台RPC框架DotNettyRPC   DotNettyRPC 1.简介 DotNettyRPC是一个基于DotNetty的跨平台RPC框架,支持.NET45以及.NET Standar ...

  8. 多线程、方便扩展的Windows服务程序框架

    多线程.方便扩展的Windows服务程序框架 吴剑 2012-06-02 转载请注明出处:http://www.cnblogs.com/wu-jian/ 前言 在项目应用中经常会碰到定时调度的工作,比 ...

  9. 【RTOS】基于V7开发板的最新版uCOS-III V3.07.03程序模板,含MDK和IAR,支持uC/Probe,与之前版本变化较大

    模板下载: 链接:https://pan.baidu.com/s/1_4z_Lg51jMT87RrRM6Qs3g   提取码:2gns 对MDK的AC6也做了支持:https://www.cnblog ...

随机推荐

  1. Python学习---网络编程 1217【all】

    OSI七层模型: 物理层, 数据链路层, 网络层,传输层,会话层,表达层,应用层 应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 传输层:TCP,UDP 网络层:I ...

  2. Python学习---django多对多之Djanog默认表学习

    案例一: from django.db import models class Book(models.Model): name = models.CharField(max_length=33) # ...

  3. 沉淀再出发:java中线程池解析

    沉淀再出发:java中线程池解析 一.前言 在多线程执行的环境之中,如果线程执行的时间短但是启动的线程又非常多,线程运转的时间基本上浪费在了创建和销毁上面,因此有没有一种方式能够让一个线程执行完自己的 ...

  4. 解决问题,链表finish

    从一个不懂链表,到反反复复改了不下50遍,提交该题页数更是突破了五页,从周三下午到周五中午的面向对象课前的20分钟,终于把这道题AC了,其实这题本来是原来C语言综合实验的一道题,但是本次在PAT上的审 ...

  5. Scala模式匹配和样例类

    Scala有一个十分强大的模式匹配机制,可以应用到很多场合:如switch语句.类型检查等.并且Scala还提供了样例类,对模式匹配进行了优化,可以快速进行匹配. 1.字符匹配     def mai ...

  6. 021.5 IO流——字符流

    ###############基本功能写 FileWriter fw = new FileWriter("xxx.txt"); fw.write("哈喽"); ...

  7. Io性能分析

    一.iostat使用说明 1.命令使用方法 使用ixstat –x 1 可以每隔1秒钟采集所有设备的io信息.其中的1类似于使用“vmstat  1”后面的1. 2.命令格式说明 ―――――――――― ...

  8. BeautifulSoup使用注意事项

    BeautifulSoup使用注意事项 BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beau ...

  9. 编程算法 - 数字在排序数组中出现的次数 代码(C)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/36869869 数字在排序数组中出现的次数 代 ...

  10. BZOJ4032:[HEOI2015]最短不公共子串(SAM)

    Description 在虐各种最长公共子串.子序列的题虐的不耐烦了之后,你决定反其道而行之. 一个串的“子串”指的是它的连续的一段,例如bcd是abcdef的子串,但bde不是. 一个串的“子序列” ...