Windows:如何将普通进程注册为服务进程

Posted CodeBowl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows:如何将普通进程注册为服务进程相关的知识,希望对你有一定的参考价值。

最近遇到了一个需求:
需要把普通进程封装为服务进程,将积累的几种方案记录下来

进程和服务

首先来了解一下什么是服务和进程

进程是指在系统中正在运行的一个应用程序;线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元。对于操 作系统而言,其调度单元是线程。一个进程至少包括一个线程,通常将该线程称为主线程。一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的多任务。
服务相当于支持系统运行的一些必要程序,程序里运行的则是 当前使用的软件一般来讲程序里的任务可以关闭,后台则有一些不能关闭,如果关了系统进程就不能正常运行了。

将进程改为服务

我们的需求:
将普通进程注册为服务。
一共有5种方案,推荐第4种和第5种

一、通过代码来实现

这种方案比较麻烦,且不适用。
将控制台程序改造为windows服务程序

二、利用VS将窗口服务程序改为Windows服务于后台运行

不推荐,比较繁琐,不太符合需求!
利用VS将窗口服务程序改为Windows服务于后台运行

三、sc命令

四、Instsrv.exe+Srvany.exe

  1. 将Instsrv.exe;Srvany.exe这两个程序放将需要注册为服务的进程文件夹下(自己确认路径,这里路径暂定为C盘根目录,服务定为Resiss)。

  2. 在运行中输入“CMD”,回车,打开命令行窗口,在提示符后面直接输入:“c:\\instsrv.exe Reeiss c:\\srvany.exe”(注意空格)然后回车,其中“c:\\instsrv.exe”和“c:\\srvany.exe”表示这两个程序保存的位置,而Mail则是你想添加的服务名称。

  1. 运行Regedit打开注册表编辑器,在HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services下,找到刚才添加的Reeiss,点击右键,新建一个键,命名为“Parameters”,点击新建的Parameters,并再次新建一个名称为“Application”的子键,数据类型为“REG_SZ”
  2. 在刚刚新建的名称为“Application”的子键,数据类型为“REG_SZ”的项目,右击修改数值,将运行目录填写进去,如果你的运行程序安装在D盘下,那么Reeiss的程序位置就是D:\\Reeiss\\Reeiss.exe ,把这个路径添入数值中。
  3. 到现在,这个服务已经成功的添加并且设置好了。

五、nssm注册

强烈推荐,比第四种方案简单
参考资料
NSSM官方网址:http://www.nssm.cc/download

简单介绍

NSSM介绍

NSSM(the Non-Sucking Service Manager)是Windows环境下一款免安装的服务管理软件,它可以将应用封装成服务,使之像windows服务可以设置自动启动等。并且可以监控程序运行状态,程序异常中断后自动启动,实现守护进程的功能。不仅支持图形界面操作,也完全支持命令行设置。

同类型的工具还有微软自己的srvany,不过nssm更加简单易用,并且功能强大。它的特点如下:

支持普通exe程序(控制台程序或者带界面的Windows程序都可以)
安装简单,修改方便
可以重定向输出(并且支持Rotation)
可以自动守护封装了的服务,程序挂掉了后可以自动重启
可以自定义环境变量

这里面的每一个功能都非常实用,使用NSSM来封装服务可以大大简化我们的开发流程了。

开发的时候是一个普通程序,降低了开发难度,调试起来非常方便
安装简单,并且可以随时修改服务属性,更新也更加方便
可以利用控制台输出直接实现一个简单的日志系统
不用考虑再加一个服务实现服务守护功能

使用步骤

1.下载
NSSM官方网址:http://www.nssm.cc/download
2.注册服务
打开cmd,cd到nssm.exe目录下,使用下面命令

注册服务使用如下命令: nssm install

会出现该界面:

参数填完后执行"install service"按钮即可将服务安装到系统,可以使用系统的服务管理工具service.msc查看了。

如果自动化安装,可以直接带上程序路径: nssm install []
3.服务管理

服务管理主要有启动、停止和重启,其命令如下:

启动服务: nssm start <servicename>
停止服务: nssm stop <servicename>
重启服务: nssm restart <servicename>
暂停/继续服务
nssm pause <servicename>
nssm continue <servicename>
查看服务状态:nssm status <servicename>

当然,也可以使用系统自带的服务管理器操作和使用系统的命令。

总结

学无止境!

以上是关于Windows:如何将普通进程注册为服务进程的主要内容,如果未能解决你的问题,请参考以下文章

Windows:如何将普通进程注册为服务进程

如何禁止普通用户终止进程?

如何启动 Windows 服务网络进程以侦听 UAC 下普通用户可见的 localhost 套接字上的端口?

检查(作为普通用户)是不是正在运行管理进程(C、Windows)

certutil.exe

windows后台服务程序编写