概述

Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这种服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。

服务安装与卸载

通过代码启动。

第一步、创建服务

BOOL Install()
{//打开服务控制管理器hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);//创建服务SC_HANDLE hService = ::CreateService(hSCM,szServiceName,szServiceName,SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,szFilePath,NULL,NULL,_T(""),NULL,NULL);::CloseServiceHandle(hService);::CloseServiceHandle(hSCM);
}

第二步、主函数ServiceMain()

调用 RegisterServiceCtrlHandler 来注册服务的控制函数, 这里要设置status.dwControlsAccepted 为 SERVICE_ACCEPT_STOP,否则你不能控制服务状态。

void WINAPI ServiceMain()
{// Register the control request handlerstatus.dwCurrentState = SERVICE_START_PENDING;status.dwControlsAccepted = SERVICE_ACCEPT_STOP;//这个要使用,否则你不能控制//注册服务控制hServiceStatus = RegisterServiceCtrlHandler(szServiceName, ServiceCtrl);if (hServiceStatus == NULL){LogEvent(_T("Handler not installed"));return;}SetServiceStatus(hServiceStatus, &status);status.dwWin32ExitCode = S_OK;status.dwCheckPoint = 0;status.dwWaitHint = 0;status.dwCurrentState = SERVICE_RUNNING;SetServiceStatus(hServiceStatus, &status);//主要业务Work();//status.dwCurrentState = SERVICE_STOPPED;SetServiceStatus(hServiceStatus, &status);LogEvent(_T("Service stopped"));
}

第三步、服务控制函数

服务调用RegisterServiceCtrlHandler或者RegisterServiceCtrlHandlerEx函数来注册它的服务控制函数ServiceCtrl()。

void WINAPI ServiceCtrl(DWORD dwControl)
{switch (dwControl){case SERVICE_CONTROL_PAUSE:ServiceStatus.dwCurrentState = SERVICE_PAUSED;break;case SERVICE_CONTROL_CONTINUE:ServiceStatus.dwCurrentState = SERVICE_RUNNING;break;case SERVICE_CONTROL_STOP:case SERVICE_CONTROL_SHUTDOWN:ServiceStatus.dwCurrentState = SERVICE_STOPPED;ServiceStatus.dwCheckPoint = 0;ServiceStatus.dwWaitHint = 0;SetServiceStatus(hStatus, &ServiceStatus);return;default:break;}// 重设服务状态SetServiceStatus(hStatus, &ServiceStatus);return;
}

第四步、卸载

BOOL Uninstall();
{//打开服务控制管理器SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);//打开服务SC_HANDLE hService = OpenService(hSCM, szServiceName, SERVICE_STOP | DELETE);//停止服务ControlService(hService, SERVICE_CONTROL_STOP, &status);//删除服务DeleteService(hService);…
}

服务安装成功

1、输入services.msc,启动 服务。

2、任务管理器,查看进程信息。服务一般都是以SYSTEM权限运行。

3、服务安装成功后,注册表位置

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\XxxService

参考

通过sc指令创建和删除服务参考:

​​​​​​【Windows脚本】服务的创建和删除_sunriver2000的博客-CSDN博客

【Windows系统】windows服务相关推荐

  1. 虚拟机Ubuntu搭建Windows系统Samba服务映射网络驱动器

    前言:前段时间在公司学习有关Qemu的运行调试,其中就有关于在Windows系统下访问Ubuntu文件资源(远程访问)的操作,对于编程来说,有些开发环境最好是在虚拟机Linux系统下进行,毕竟虚拟机会 ...

  2. 卸载linux进入windows系统,Windows双系统下卸载Linux

    windows使用mbr来引导启动,linux使用grub来引导,在装了双系统之后,就会以grub来引导启动.而双系统卸载Linux的主要问题是当在windows中将linux 分区直接格式化之后,G ...

  3. Windows 系统第三方服务开发者可以借助 WSH (Windows Service Hardening) 机制提高安全性

    Windows服务帐户是特权升级的首选攻击面之一,如果你能够盗用此类帐户,则获得最高特权非常容易,这主要是由于操作系统默认将强大的模拟特权授予服务. 即使Microsoft引入了WSH(Windows ...

  4. windows系统的服务启动脚本和服务停止脚本

    服务启动脚本 @echo off #执行这条命令后关闭所有命令(包括本身这条命令的回显,没有@就不包含本身) chcp 65001 #65001为UTF-8的代码页,显示utf8编码的中文字符 %1 ...

  5. Windows API 逐个逐个学(3)----Windows系统基本服务API GetSystemDirectory

    贴代码 VC++ code: 1 /* ************************************ 2 *<精通Windows API> 3 * 示例代码 4 * basic ...

  6. python windows系统_python管理windows系统tomcat服务

    基于python实现的功能更强大的tomcat 守护进程.目前实现的功能: 1.通过性更强 ---通过修改config文件即可实现对其他tomcat程序的守护: 2.具有日志查看 --- 轮询30个日 ...

  7. oracle windows系统oracle服务消失解决办法

    打开CMD (管理员权限)  切换到oracle 的bin目录 oradim -NEW -SID XE -STARTMODE manual -PFILE "E:\oraclexe\app\o ...

  8. Windows系统开通sftp服务

    多系统之间文件传输,一般会使用ftp或者sftp方式 ,在Linux系统中默认安装有sftp,而Windows系统需要手动安装. 这里介绍的sftp软件是freeSSHD软件,这个软件小巧,配置简单. ...

  9. 利用RIS远程安装Windows系统

    目前常见的Windows系统安装方式通常都是直接利用Windows系统启动安装光盘进行Setup式一步步安装,或者将安装文件复制到硬盘上在DOS下运行执行Winnt来安装,无论用哪种方法都须用到Win ...

  10. 怎样提高Windows系统的启动速度

    Windows10系统由于加入了"快速启动"机制,所以启动速度在所有Windows版本中是最快的.但是随着使用时间的增加,安装的程序的增多,启动速度就会逐渐减慢.通过下面的方法可以 ...

最新文章

  1. JDK5.0 特性-线程任务执行架构 ScheduledExecutorService
  2. UIAlertView' is deprecated: first deprecated in iOS 9.0 - UIAlertView is deprecated. Use UIAlert
  3. HDU多校2 - 6767 New Equipments(最小费用最大流)
  4. ElasticSearch对地理数据查询(二)
  5. 在Linux中创建静态库.a和动态库.so
  6. c语言交换两个数字 位运算_交换两个8位数字| 8086微处理器
  7. Javascript——入门基础
  8. 【Dairy】2016.10.30 BirthdayParty
  9. 【1】windows下IOS开发基础环境搭建
  10. Android--建立能与访问者进行相互通信的本地服务
  11. CAS实现单点登录SSO执行原理探究超详细
  12. 算法:Unix是如何简化路径的Simplify Path简化路径规则
  13. 最全的Vim操作快捷键
  14. KindEditor实现上传图片与回显
  15. yolov3训练实现火焰检测(pytorch)
  16. 如何用安卓手机做代理服务器
  17. 导入oracle 904,江湖救急..ora-904怎么处理?
  18. SecureCRT 关键字配色显示
  19. Linux/Windows下 C/C++开发的差异
  20. linux编辑lnk文件,如何打开和编辑Windows .lnk快捷方式文件? | MOS86

热门文章

  1. canvas实现的炫酷文字特效html页面源码
  2. 用“智慧”引领汽车行业数字化未来
  3. vuex-pathify入门
  4. 不要放过那个装X的阿里,android游戏开发大全第二版PDF
  5. 肚子上面的肉怎么减?
  6. 企业人员信息管理系统开发
  7. 举例 | 轻松读懂“实验”与“试验”的区别
  8. Samba服务器原理及实验搭建(匿名共享,用户认证,权限设置,IP限制,目录挂载,桌面运维)
  9. Let Invariant Rationale Discovery Inspire Graph Contrastive Learning
  10. Android TextView使用HTML处理字体样式、显示图片等