管理 Windows 自定义服务(Windows Service)
管理 Windows 自定义服务(Windows Service)
什么是 Windows 服务
Windows 系统中的服务主要分为「Windows 系统服务」和「应用程序服务」这两大类,其中:
Windows 系统服务
Windows 服务是 Windows NT 系列操作系统(如 Windows 11、10、8、7、Vista)的核心组成部分。
计算机启动时,Windows 会启动一些基础服务,以确保操作系统和其他程序能够顺利运行。例如,「Windows Time」服务就用于同步软件、网络、网站和服务器的当前日期和时间。
在 Windows 系统中,会有几十上百个服务在后台运行,但不是所有服务对 Windows 的运行都至关重要。例如,如果你的设备中没有搭载蓝牙模块,「Bluetooth Support Service」就无需在后台运行。
应用程序服务
除了 Windows 服务外,在安装一些应用程序时,也会在系统中安装自己的专属服务。例如,Google Chrome 浏览器安装时就会注册以下服务:
- Google Chrome Elevation Service
- Google 更新服务(gupdate)
- Google 更新服务(gupdatem)
有时候我们需要在 Windows 里运行需要后台启动的命令行程序(比如 Aria2、Caddy 等)。此时,一般情况下我们需要开启一个 cmd 或 PowerShell 窗口,运行命令行程序后,最小化窗口,并且不能关闭。需要关闭或重启该命令行程序时,再在 cmd 或 PowerShell 窗口里手动关闭或重启之。总之,操作起来是比较麻烦的。那么,有没有一种简单的办法可以将这些命令行程序集成到 Windows 服务里呢?答案是有的。下面分别通过使用第三方工具、cmd 的内置命令(sc
) 和 PowerShell 的内置命令(New-Service
) 将命令行程序集成到 Windows 服务中。
使用第三方工具
NSSM (可创建带启动参数的服务)
NSSM(Non-Sucking Service Manager)是一个第三方工具,可用于在 Windows 上创建和管理服务。
安装和使用
-
安装 NSSM:
-
使用 Scoop 工具安装 NSSM:
scoop install main/nssm
-
使用 ZIP 文件安装 NSSM:
下载 NSSM 的 ZIP 文件,例如
https://nssm.cc/release/nssm-2.24.zip
-
-
使用 NSSM 创建服务:
-
需要显示服务安装 GUI:
nssm install [<ServiceName>]
GUI 如下图所示:
-
需要隐藏服务安装 GUI:
nssm install <ServiceName> <Path to Executable> [<args> ...]
以创建
Aria2
服务为例:nssm install Aria2 D:\aria2\aria2c.exe nssm set Aria2 AppDirectory D:\aria2 nssm set Aria2 AppParameters --conf=aria2.conf nssm set Aria2 Description "aria2 is a lightweight multi-protocol & multi-source, cross platform download utility operated in command-line. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink." # 或者简单创建 nssm install Aria2 D:\aria2\aria2c.exe --conf=aria2.conf
-
NSSM 提供了更灵活和简单的方式来管理 Windows 服务,尤其是对于需要自定义参数的服务。
删除服务
NSSM 提供了 nssm remove
命令,可以删除服务。
# 弹出确认框(强制删除)
nssm remove <ServiceName>
# 不弹出确认框(静默删除)
nssm remove <ServiceName> confirm
例如:
nssm remove Aria2 confirm
管理服务
# 启动服务
nssm start <ServiceName>
# 停止服务
nssm stop <ServiceName>
# 重启服务
nssm restart <ServiceName>
# 查询服务状态
nssm status <ServiceName>
# 查询服务状态码
nssm statuscode <ServiceName>
nssm rotate <ServiceName>
nssm processes <ServiceName>
使用 Windows 系统内置命令工具
cmd 的 sc
命令(无法创建带启动参数的服务):
-
打开命令提示符(以管理员身份运行)。
-
使用
sc
命令创建服务,语法如下:sc create <ServiceName> binPath= "<Path to Executable>" DisplayName= "<Display Name>" start= <StartType>
<ServiceName>
:服务的服务名,在服务列表中唯一,不可重复。<Path to Executable>
:服务运行的可执行文件的路径。<Display Name>
:服务的显示名称。<StartType>
:服务的启动类型,可以是auto
、demand
或者disabled
。
注意:等号前不能有空格,等号后必须有空格
例如:
sc create MyService binPath= "C:\Path\To\MyService.exe" DisplayName= "MyService" start= auto
-
执行完成后,服务就会被创建。
-
使用
sc
命令查询服务,语法如下:sc query <ServiceName>
-
使用
sc
命令启动服务,语法如下:sc start <ServiceName>
-
使用
sc
命令停止服务,语法如下:sc stop <ServiceName>
-
使用
sc
命令删除服务,语法如下:sc delete <ServiceName>
注意:
- 先将服务停止再删除。
- 删除成功后需要重启系统,服务才会从服务列表中删除。
PowerShell 的 New-Service
命令(无法创建带启动参数的服务):
创建服务:
-
打开 PowerShell(以管理员身份运行)。
-
使用
New-Service
cmdlet 创建服务,语法如下:New-Service -Name <ServiceName> -BinaryPathName "<Path to Executable>" -StartupType <StartType> # 或更多设置 New-Service -Name <ServiceName> -BinaryPathName "<Path to Executable>" -StartupType <StartType> -DisplayName "<Display Name>" -Description "<Description>"
<ServiceName>
:你想要为服务指定的名称。<Path to Executable>
:服务运行的可执行文件的路径。<StartType>
:服务的启动类型,可以是Automatic
、Manual
或者Disabled
。<Display Name>
:服务的显示名称。<Description>
:服务的描述。
例如:
New-Service -Name MyService -BinaryPathName "C:\Path\To\MyService.exe" -StartupType Automatic New-Service -Name MyService -BinaryPathName "C:\Path\To\MyService.exe" -StartupType Automatic -DisplayName "My Service" -Description "This is my custom service"
-
执行完成后,服务就会被创建。
查看服务列表:
Get-Service
删除服务
sc delete <ServiceName>
需要重启系统,服务才会从服务列表中删除。
无论是哪种方法,创建服务后,可以使用 services.msc
命令或者服务管理器来管理这些服务。