在 services.msc 服务窗口中可以找到大部分 Windows 系统服务。这些服务有些是必须的,有些则可以有选择地停掉来节省系统资源:
-
Print Spooler (Spooler): 如果你不使用打印机,可以将其停止。
-
Windows Search (WSearch): 如果你不需要文件搜索服务,可以停止。
-
Bluetooth Support Service (bthserv): 如果你的计算机没有蓝牙设备,可以停止。
-
Windows Time (w32time): 如果不需要通过网络同步时间,可以停止。
-
Remote Registry (RemoteRegistry): 如果不需要远程注册表访问,可以停止。
-
Windows Update (wuauserv): 在某些情况下,用户可能选择手动管理更新而不依赖于Windows更新服务。
-
Windows Error Reporting Service (wermgr): 如果你不希望将错误报告发送到Microsoft,可以停止。
-
Windows Defender Antivirus Service (WinDefend): 如果你使用其他杀毒软件,可以停止Windows Defender服务。
通过命令行可以对这些服务进行启动或停止:
d:> net start spooler
Print Spooler 服务正在启动 .
Print Spooler 服务已经启动成功。
d:> net stop spooler
Print Spooler 服务正在停止.
Print Spooler 服务已成功停止。
Windows 中有哪些服务,如何查看这些服务的状态?
通过命令行可以对一些基本服务进行管理,比如以下命令可以简要地列出哪些服务正在运行:
d:> net start
Windows 服务:
Agent Service
Application Identity
Application Information
AVCTP 服务
Background Intelligent Transfer Service
Background Tasks Infrastructure Service
Base Filtering Engine
Certificate Propagation
CNG Key Isolation
以上命令列出的是服务的描述名,而不是服务的真实名称。我们无法通过描述名来对服务进行启停。如果要查询服务的真实名称,可以通过 sc 命令:
d:> sc query
SERVICE_NAME: AppIDSvc
DISPLAY_NAME: Application Identity
TYPE : 30 WIN32
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
SERVICE_NAME: Appinfo
DISPLAY_NAME: Application Information
TYPE : 30 WIN32
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
通过 sc 命令加条件可以查询停止运行的服务或所有状态的服务:
d:> sc query state=inactive
d:> sc query state=all
命令 sc 显示的服务名以及显示名比较长,我们通过 python 将关键信息过滤出来:
#!python3
import win32service
from pprint import pprint
def format_string_with_padding(input_string, desired_length):
# 使用字符串的format方法进行格式化
formatted_string = "{:<{}}".format(input_string, desired_length)
return formatted_string
# Open the Service Control Manager
sc_manager = win32service.OpenSCManager(None, None, win32service.SC_MANAGER_ENUMERATE_SERVICE)
# Enumerate service status
service_status = win32service.EnumServicesStatus(sc_manager, win32service.SERVICE_WIN32, win32service.SERVICE_STATE_ALL)
#pprint(service_status)
# Close the Service Control Manager
win32service.CloseServiceHandle(sc_manager)
# Extract and print running service names
running_services = [service[0] for service in service_status if service[2][1] == win32service.SERVICE_RUNNING]
stopped_services = [service[0] for service in service_status if service[2][1] == win32service.SERVICE_STOPPED]
print()
print("All Services:")
print("="*30)
for s in service_status:
if s[2][1] == win32service.SERVICE_RUNNING:
print('Rt', format_string_with_padding(s[0],30),"t", s[1])
if s[2][1] == win32service.SERVICE_STOPPED:
print('St', format_string_with_padding(s[0],30),"t", s[1])
print()
print("Running Services:")
print("="*30)
for service_name in running_services:
print(service_name)
print()
print("Stopped Services:")
print("="*30)
for service_name in stopped_services:
print(service_name)
以上代码将所有服务的状态都分组打印出来,其中运行状态的服务以 R 开头,停止运行状态的服务以 S 开头。
程序执行结果如下:
在运行 python 代码前需要先安装 pywin32 模块。通过 pywin32 下的 win32service 模块显示的系统服务远比在 services.msc 中显示的多。有些系统服务并没有在 services.msc 中显示,但是可以用 net stop 对其进行操作。
并非所有服务都可以手动停止,有些系统服务当使用 net stop 停止后会重新启动。这些与服务的属性以及相互依赖有关,有依赖关系的服务会被其它服务自动启起来。
注意
所有与系统服务相关的命令或程序都需要在管理员权限下执行。
全文完。
如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。
原文始发于微信公众号(生有可恋):Windows 系统服务
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论