[Win基础]-11-理解Windows进程与服务

引言

这篇文章主要讲解Windows中的进程与服务,理解什么是进程,什么是服务,以及如何创建自启动服务。

文章目录

0×1.Windows进程与服务解析

首先来看看网络上对进程的定义:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

进程的分类:在windows中,进程又分为普通进程和共享进程,普通进程往往以单个exe文件启动,而共享进程往往以宿主文件的形式启动,例如svchost.exe文件就是windows中最常用的宿主进程。

进程的启动方式:使用者启动(双击或命令行调用),其他程序调用(例如:cmd调用notepad),登录自启动(例如:在注册表启动项添加程序路径),使用服务方式启动(又分为:共享进程方式启动:RpcSs(Remote Procedure Call (RPC)),单独进程的方式启动:spooler(print spooler))services.msc服务管理器中的所有数据都保存在注册表中,包括服务的可调用动态链接库(.dll)文件。

特殊:驱动类型,可被进程调用运行在进程分配的内存空间中,或运行在系统内核分配的内存空间中。

下面是视频中操作进程用到的命令:

					
					#CMD操作进程命令
					//查看进程列表
					C:\Windows\System32> tasklist /svc
					//使用进程名结束进程
					C:\Windows\System32> taskkill /IM notepad.exe /F
					//使用PID结束进程
					C:\Windows\System32> taskkill /PID 1234 /F

					#PowerShell操作进程命令
					//获取进程列表
					PS C:\Windows\System32> Get-Process
					//通过名称获取单个进程信息,通配符*能够获取cmd开头的所有进程
					PS C:\Windows\System32> Get-Process -Name "cmd*"
					//通过PID获取单个进程信息,例如pid为1234的进程
					PS C:\Windows\System32> Get-Process -PID 1234

					//通过名称结束单个进程,注意PowerShell对进程的操作,不需要携带.exe后缀,只需要程序名称即可
					PS C:\Windows\System32> Stop-Process -Name "cmd"
					//通过名称结束多个进程,结束cmd开头的所有进程
					PS C:\Windows\System32> Stop-Process -Name "cmd*"
					//通过PID结束单个进程,结束进程id为1234的进程
					PS C:\Windows\System32> Stop-Process -ID 1234

					#CMD操作服务命令
					//以打印机服务spooler举例
					//查询服务启动状态,查询服务名称为spooler的服务的启动状态
					C:\Windows\System32> sc query spooler
					//停止服务
					C:\Windows\System32> sc stop spooler
					//启动服务
					C:\Windows\System32> sc start spooler
					//更改服务启动类型,start=后面需要有一个空格,然后接auto(自动启动),demand(手动启动),disabled(禁止启动)
					C:\Windows\System32> sc config spooler start= <auto|demand|disabled>
					//例如,将spooler更改成手动启动
					C:\Windows\System32> sc config spooler start= demand

					#CMD注册修改和删除服务(不能成功启动的原因在视频中有讲解)
					#这种注册服务的方法,需要自己写一个dll动态链接库,或者封装一个exe程序,程序包含windows服务管理器需要调用的服务函数功能,才能启动成功
					//创建
					C:\Windows\System32> sc create CMD binPath= "c:\windows\system32\cmd.exe" start= auto displayname= "cmd-line"
					//修改服务描述
					C:\Windows\System32> sc description CMD "HackMM"
					//删除服务
					C:\Windows\System32> sc delete CMD

					#使用第三方宿主程序winsw.exe创建服务
					#这个宿主程序在本文结尾提供下载
					#弊端:每个winsw.exe文件只能对应一个要启动服务程序,不能像svchost.exe一样单个程序承载多个服务
					//winsw.exe程序需要自己创建一个同名的winsw.xml配置文件(宿主程序的名称可以随意改动,配置文件和宿主程序同名即可),放在同一个文件夹下,内容如下
					<service>
					  <id>服务名称</id>
					  <name>服务显示名称</name>
					  <description>服务描述信息</description>
					  <env name="环境变量" value="环境变量的值"/>
					  <executable>服务的完整路径</executable>
					  <arguments>程序如果需要传入参数,写在这里</arguments>
					  <log mode="roll"></log>
					</service>

					//例如,将系统中的notepad做成服务,下面的配置供参考
					<service>
					  <id>notepad</id>
					  <name>notepad app</name>
					  <description>hk987.xyz notepad app</description>
					  <executable>c:\windows\system32\notepad.exe</executable>
					  <log mode="roll"></log>
					</service>
					//假设我没有改宿主程序的名称,宿主程序任然叫winsw.exe,在配置保存好后,用超级管理员运行下面的命令,注册服务
					C:\Windows\System32> winsw.exe install
					//启动服务
					C:\Windows\System32> winsw.exe start
					//卸载服务
					C:\Windows\System32> winsw.exe uninstall
					
					

安装服务用到的软件:

*「winsw软件」:点击打开