在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. Server runtime

    spring mvc常用的注解: 个介绍. @Controller @Controller 负责注册一个bean 到spring 上下文中,bean 的ID 默认为 类名称开头字母小写,你也可以自己指 ...

  2. 10分钟开始.Net Core

    .Net Core 2.0发布了,API也越来越多.此时不用.Net Core,更待何时? 安装.Net Core SDK         首先,我们当然要先装.Net Core SDK,在这里下载( ...

  3. 沉淀再出发:用python画各种图表

    沉淀再出发:用python画各种图表 一.前言 最近需要用python来做一些统计和画图,因此做一些笔记. 二.python画各种图表 2.1.使用turtle来画图 import turtle as ...

  4. 沉淀再出发:PHP的中级内容

    沉淀再出发:PHP的中级内容 一.前言     前面我们介绍了PHP的简单的语法知识以及相关的用法,接下来我们将PHP+mysql以及PHP+ajax结合起来进行研究. 二.PHP+mysql     ...

  5. SRAM(静态)存储器芯片的读/写周期

    一. 要保证正确地读/写,必须注意CPU时序与存储器读/写周期的配合.一般存储器芯片手册都会给出芯片读/写周期的时序图. Intel 2114芯片的读.写周期时序如图所示. 二. 读周期 读操作时,必 ...

  6. windows下sqli-labs的搭建及学习(POST篇)

    windows下sqli-labs的搭建及学习(GET篇): http://blog.csdn.net/sherlock17/article/details/64454449 Less-11:基于错误 ...

  7. Discuz3.3注册程序修改添加记录推荐人账号

    Discuz3.3注册入口地址为:member.php?mod=register 一.member.php: 打开之后,代码非常简单. 其中有一句: $mod = !in_array($discuz- ...

  8. 定义路由的state参数

    使用$stateProvider.state('stateName', {url: '', params: {}, views: {},...})创建路由,其中部分参数解析: params: 是一个包 ...

  9. UVa 12230 - Crossing Rivers(数学期望)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

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

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