win32控制台变服务代码
1、服务的主函数以及以及函数的声明,全局变量的定义
#define SERVICE_NAME "srv_follow" SERVICE_STATUS g_ServiceStatus;
SERVICE_STATUS_HANDLE g_hServiceStatusHandle;
void WINAPI service_main(int argc, char** argv);
void WINAPI ServiceHandler(DWORD fdwControl);
//服务的主函数;
int _tmain(int argc, _TCHAR* argv[])
{
//设置服务程序所在的地址;
TCHAR path[MAX_PATH] = {};
GetModuleFileName(NULL,path,MAX_PATH);
_stprintf(path,_T("%s//..//"),path);
SetCurrentDirectory(path); //设置服务表;
SERVICE_TABLE_ENTRY ServiceTable[];
//设置服务到服务表;
ServiceTable[].lpServiceName = _T(SERVICE_NAME);
ServiceTable[].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)service_main;
//表的最后元素必须为NULL;
ServiceTable[].lpServiceName = NULL;
ServiceTable[].lpServiceProc = NULL; //服务分派到服务控制管理器;
StartServiceCtrlDispatcher(ServiceTable);
Logger::getInstance()->info(__FILE__,__LINE__,"StartServiceCtrlDispatcher success!");
DWORD err = GetLastError(); return ;
}
2、service_main函数
void WINAPI service_main(int argc, char** argv)
{
//SERVICE_WIN32_OWN_PROCESS
g_ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
g_ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
g_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PAUSE_CONTINUE;
g_ServiceStatus.dwWin32ExitCode = ;
g_ServiceStatus.dwServiceSpecificExitCode = ;
g_ServiceStatus.dwCheckPoint = ;
g_ServiceStatus.dwWaitHint = ;
g_hServiceStatusHandle = RegisterServiceCtrlHandler(_T(SERVICE_NAME), ServiceHandler);
if (g_hServiceStatusHandle==)
{
DWORD nError = GetLastError();
}
//add your init code here 这里是程序入口 // Initialization complete - report running status
g_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
g_ServiceStatus.dwCheckPoint = ;
g_ServiceStatus.dwWaitHint = ;
if(!SetServiceStatus(g_hServiceStatusHandle, &g_ServiceStatus))
{
DWORD nError = GetLastError();
}
}
3、ServiceHandler函数
void WINAPI ServiceHandler(DWORD fdwControl)
{
switch(fdwControl)
{
case SERVICE_CONTROL_STOP:
case SERVICE_CONTROL_SHUTDOWN:
g_ServiceStatus.dwWin32ExitCode = ;
g_ServiceStatus.dwCurrentState = SERVICE_STOPPED;
g_ServiceStatus.dwCheckPoint = ;
g_ServiceStatus.dwWaitHint = ;
//add you quit code here 这里释放资源 break;
default:
return;
};
if (!SetServiceStatus(g_hServiceStatusHandle, &g_ServiceStatus))
{
DWORD nError = GetLastError();
}
}
以上就是把win32改为后台服务所需要的代码。
win32控制台变服务代码的更多相关文章
- 【转】WIN32 控制台程序
http://blog.csdn.net/houmin0036/article/details/7702236 win32控制台项目指在32位Windows命令提示符(即所谓的dos)环境下运行的应用 ...
- vc2010 win32 控制台应用程序中文乱码
vc2010 win32 控制台应用程序中文乱码 在 vc2010 上用 win32 控制台程序写些测试代码调用 windows api ,处理错误信息时,发现用 wprintf 输出的错误信息出现了 ...
- C# Win32控制台应用程序忽略 Ctrl + C,阻止程序退出
C# Win32控制台应用程序忽略 Ctrl + C,阻止程序退出,这里使用到了Windows API SetConsoleCtrlHandler函数 注意:在VS中调试执行时,在处理程序例程中设置断 ...
- Win32控制台程序和Win32应用程序
刚接触Windows那一套,大多数概念都还没建立起来,整理了一下网上对“Win32控制台程序”的理解,谢谢各位网友了. win32控制台项目指在32位Windows命令提示符(即所谓的dos)环境下运 ...
- vs2008 新建win32控制台程序提示:脚本错误
解决方案: 1.根据错误信息中的url,找到对应文件夹下的htm文件 2.使用notepad++打开default.htm文件,找到错误提示的434行,注释掉433和434行 然后保存文件,重新新建w ...
- Win32控制台、Win32项目、MFC项目、CLR控制台、CLR空项目、空项目区别
转载:https://blog.csdn.net/zfmss/article/details/79244696 1.Win32控制台 初始代码模版以main为程序入口,默认情况下,只链接C++运行时库 ...
- SpringCloud发现服务代码(EurekaClient,DiscoveryClient)
1.说明 本文介绍SpringCloud发现服务代码的开发, 通过使用EurekaClient,DiscoveryClient来发现注册中心的服务等, 从而可以自定义客户端对注册中心的高级用法. 2. ...
- VS2017:win32项目与win32控制台应用程序的转换方法
原文:https://www.cnblogs.com/asuser/articles/12297251.html 刚开始使用VS2017新建项目工程时,有时把应用类型的工程建成控制台类型的工程,在编译 ...
- win32控制台实现按任意键退出的功能
win7之后的五win32 控制台出现了程序运行完之后就立即结束的问题,程序员根本无法看输出的结果.未来让控制台运行完之后能够等待程序员的操作.可以使用: system("PAUSE&quo ...
随机推荐
- mongodb安装教程
MongoDB 下载及安装 MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB 预编译二进制包下载地址:https://www. ...
- PAT-1003 Emergency(Dijkstra)
1003 Emergency (25 分) As an emergency rescue team leader of a city, you are given a special map of y ...
- POW的重力之美
定律一:每一个UTXO都保持其状不变,直到有外力迫使它改变这种状态为止--艾萨克•牛顿,原理2.0 在过去的几年里,关于比特币的工作量证明(PoW)所造成的"巨大的能源浪费"已经被 ...
- java BigDecimal实现精确加减乘除运算
java.math.BigDecimal.BigDecimal一共有4个够造方法,让我先来看看其中的两种用法: 第一种:BigDecimal(double val)Translates a doubl ...
- Test Cases
对于mode1 1 路径下一个空文件夹 结果:生成一个空的txt 2路径下一个文件夹内包含一个txt内容为abd(最基本的一个单词) 3路径下一个空文件夹一个txt,txt内容为以不同符号 ...
- Daily Scrumming* 2015.12.8(Day 1)
一.团队scrum meeting照片 二.今日总结 姓名 WorkItem ID 工作内容 签入链接以及备注说明 江昊 任务942 学习使用github,在github上建立组织并将所有队员纳入, ...
- Linux内核分析-两种方式使用同一个系统调用
实验部分 根据系统调用表,选取一个系统调用.我选得是mkdir这个系统调用,其系统调用号为39,即0x27 由于mkdir函数的原型为 int mkdir (const char *filename, ...
- Linux内核分析 笔记三 构造一个简单的Linux系统MenuOS ——by王玥
一.知识点总结 (一)Linux源代码简介 arch/x86目录下的代码是我们重点关注的 内核启动相关代码都在init目录下 start_kernel函数相当于普通C程序的main函数 linux的核 ...
- 调研android开发环境的发展演变
这是第一次接触android开发,特意上网搜索视频进行了自身知识补充,觉得说视频做得很不错,从android的发展历程以及一些基本常识都讲得很详细,也很有趣,也所以拿出来同大家一起分享学习,网址是:h ...
- java向上转型和向下转型
转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展. 向上转型:子类引用的对象 ...