Windows 中的按用户服务

当用户登录到 Windows 时,OS 会创建 每用户服务。 当用户注销时,这些服务将停止并删除。 它们在用户帐户的安全上下文中运行,而不是内置安全主体。 与以前运行与预配置帐户或作为任务关联的这些服务的方法相比,此行为提供了更好的资源管理。

注意

每用户服务仅在安装桌面体验时在 Windows Server 中可用。 有关详细信息,请参阅 服务器核心与具有桌面体验的服务器安装选项

Windows 基于注册表中定义的模板创建这些每用户服务。 如果需要管理或控制这些服务的行为,可以调整模板。 例如,可以将模板服务的启动类型设置为 “禁用”。 在此示例中,Windows 以“已停止”和“已禁用”状态创建每用户服务。

重要提示

在广泛部署到生产环境之前,请仔细测试对模板服务配置所做的任何更改。

使用本文中的信息来了解每用户服务、配置用户服务模板,以及通过组策略和安全模板管理每用户服务。

每用户服务列表

下表列出了当前版本的 Windows 中的每用户服务。 Windows 10/11 的其他版本可能没有相同的可用服务。

在重新配置这些服务中的任何一项之前,请查看此信息以了解其影响。 例如,如果禁用每用户服务,则可能有依赖应用无法正常工作。

显示名称 服务名称 默认开始类型 依存关系 描述
代理激活运行时 AarSvc Manual 用于激活对话代理应用程序的运行时。
蓝牙用户支持服务 BluetoothUserService Manual 支持与每个用户会话相关的蓝牙功能的正确功能。
OneCore捕获服务 CaptureService Manual 为调用 Windows.Graphics.Capture 命名空间的屏幕捕获 API 的应用程序启用可选的屏幕捕获功能。
剪贴板用户服务 cbdhsvc 自动 (延迟启动) Windows 将此用户服务用于剪贴板方案。 例如,剪贴板历史记录或跨设备同步。 有关详细信息,请参阅 Windows 中的剪贴板
云备份和还原服务 CloudBackupRestoreSvc Manual 监视系统的应用程序和设置状态的更改。 如果需要,此服务会执行云备份和还原操作。
连接设备平台用户服务 CDPUserSvc 自动 - 网络连接代理
- 远程过程调用 (RPC)
- TCP/IP 协议驱动程序
此服务允许用户连接、管理和控制连接的设备。 这些连接的设备包括移动设备、Xbox、HoloLens 或智能/IoT 设备。 有关一个特定示例,请参阅 在 Windows 中与附近的设备共享内容
同意 UX 用户服务 ConsentUxUserSvc Manual 允许系统请求用户同意,以允许应用访问敏感资源和信息,例如设备的位置。
联系人数据 PimIndexMaintenanceSvc Manual UnistoreSvc 为联系人数据编制索引,以便快速搜索联系人。 如果停止或禁用此服务,搜索结果中可能缺少联系人。
凭据注册管理器 CredentialEnrollmentManagerUserSvc Manual 此服务支持安全存储和检索用户凭据。 例如,网站、远程桌面连接或其他应用的令牌。
设备关联代理 DeviceAssociationBrokerSvc Manual - DevicePicker
- Shell 配对 UX
支持新设备方案的应用内配对和访问检查。
设备选取器 DevicePickerUserSvc Manual Windows 使用此用户服务来管理 Miracast、Digital Living Network Alliance (DLNA) ,以及 Discovery and Launch (DIAL) 体验。
设备流 DevicesFlowUserSvc Manual 允许连接用户界面和设置应用与 WiFi 显示器和蓝牙设备进行连接和配对。
游戏 DVR 和广播用户服务 BcastDVRUserService Manual Windows 将此用户服务用于游戏录制和实时广播。
消息传送服务 MessagingService Manual 此服务支持短信和相关功能。
正在播放会话管理器 NPSMSvc Manual 正在播放的会话管理器 (NPSM) 服务管理设备上运行的媒体会话。
计划 9 重定向程序服务 P9RdrService Manual 启用适用于 Linux 的 Windows 子系统支持的触发器启动 plan9 文件服务器。 有关详细信息,请参阅 Bell Labs 计划 9
笔服务 PenService Manual 在笔输入设备上按尾部按钮时,此服务会响应这些操作。 它可以启动应用程序或执行你在“设置”中自定义的其他操作。 有关详细信息,请参阅有关如何在触控笔设备上使用 Surface 触控笔的用户文档或硬件开发人员文档。
打印工作流 PrintWorkflowUserSvc Manual 提供对 打印工作流 应用程序的支持。 如果关闭此服务,某些打印功能可能无法成功工作。
同步主机 OneSyncSvc 自动 (延迟启动) 此服务同步邮件、联系人、日历和其他用户数据。 停止此服务时,依赖于此功能的邮件和其他应用程序将无法正常工作。
UDK 用户服务 UdkUserSvc Manual Windows 使用此服务来协调 shell 体验。
用户数据访问 UserDataSvc Manual UnistoreSvc 使应用能够访问结构化用户数据,包括联系人信息、日历、消息和其他内容。 如果停止或禁用此服务,使用此数据的应用可能无法正常工作。
用户数据存储 UnistoreSvc Manual 处理结构化用户数据的存储,包括联系人信息、日历、消息和其他内容。 如果停止或禁用此服务,使用此数据的应用可能无法正常工作。
Web 威胁防御用户服务 webthreatdefusersvc 自动 当未经授权的实体尝试访问其凭据时,此服务会警告用户,从而帮助保护计算机。
Windows 推送通知用户服务 WpnUserService 自动 此服务 (WNS) 平台托管 Windows 推送通知服务 ,该平台支持本地通知和推送通知。 支持的通知包括磁贴、Toast 和原始通知。

查看每用户服务

你无法在 Windows 注册表外部查看用户服务模板,但可以看到特定于用户的每个用户服务。 Windows 使用以下格式显示这些服务: <service name>_LUID 其中 <service name> 是用户服务的显示名称,是 LUID 用户上下文的本地唯一标识符。

例如,你可能会看到以下每用户服务名称:

  • Contact Data_443f50
  • Sync Host_443f50
  • User Data Access_443f50
  • User Data Storage_443f50

注意

所有用户服务的显示名称和服务名称包括相同的 LUID 后缀。

在 Windows 服务控制台中查看每用户服务

登录到 Windows 时,请运行 services.msc 以打开服务控制台。 查看本地计算机时,可以看到用户帐户的这些服务。

使用 Windows PowerShell 查看每用户服务

以下 PowerShell 脚本是有关如何查询每用户服务的示例。 它查询包含 64 位值的服务类型值。

# Define the bit value for per-user services in the ServiceType property of a service object
$flag = 64

# Define an empty array to store the resulting services that match the criteria
$serviceList = @()

# Get all services on the computer and store them in the variable
$services = Get-Service

# Loop through each service in the array of services.
foreach ( $service in $services ) {
  # For each specific service, check if the service type property includes the 64 bit using the bitwise AND operator (-band).
  # If the result equals the flag value, then the service is a per-user service.
  if ( ( $service.ServiceType -band $flag ) -eq $flag ) { 
    # When a per-user service is found, then add that service object to the results array.
    $serviceList += $service
  }
}

# Display the results array, sorted by display name, in a table format with the specified properties.
$serviceList | Sort-Object DisplayName | Format-Table DisplayName, Name, StartType, ServiceType

从命令行查看每用户服务

运行 cmd.exe 以打开 Windows 命令提示符。 sc qc使用 命令查询这些服务。 Type 值指示服务是用户服务模板还是用户服务实例。

以下示例查询 游戏 DVR 和广播用户服务 () BcastDVRUserService 服务的模板和用户特定实例:

sc qc BcastDVRUserService
sc qc BcastDVRUserService_18f113

在两个服务上运行 sc.exe qc 并突出显示输出中的类型值的 Windows 命令行会话的屏幕截图。

如何禁用每用户服务

用户服务的模板不会显示在 服务 控制台中, (services.msc) 。 若要禁用每用户服务,需要使用组策略或脚本化解决方案直接编辑注册表。 模板位于 的注册表中 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

注意

禁用每用户服务时,Windows 在用户登录时仍会创建该服务,但处于“已停止”和“已禁用”状态。 当用户注销时,Windows 会删除每用户服务。

不能使用常规组策略管理方法管理所有用户服务模板。 由于每用户服务不会显示在服务管理控制台中,因此它们也不会显示在组策略服务策略编辑器中。

此外,还有四个用户服务无法使用安全模板进行管理:

  • PimIndexMaintenanceSvc
  • UnistoreSvc
  • UserDataSvc
  • WpnUserService

根据这些限制,可以使用以下方法来管理每用户服务模板:

  • 安全模板和脚本或组策略首选项注册表策略的组合。
  • 所有服务的组策略首选项。
  • 所有服务的脚本。

使用安全模板管理模板服务

可以使用 安全模板管理 CDPUserSvc 和 OneSyncSvc 每个用户的服务。

例如:

[Unicode]
Unicode=yes
[Version]
signature="$CHICAGO$"
Revision=1
[Service General Setting]
"CDPUserSVC".4,""

使用脚本管理每用户服务

可以创建一个脚本来更改每用户服务的启动类型。 然后使用组策略或其他管理解决方案(例如Microsoft Configuration Manager)将脚本部署到目标设备。

示例 1:使用 Set-Service PowerShell cmdlet

以下示例脚本使用 Set-Service PowerShell cmdlet 将 PimIndexMaintenanceSvc 服务启动类型配置为禁用:

Set-Service -Name PimIndexMaintenanceSvc -StartupType Disabled

示例 2:使用 sc.exe config 命令行

以下示例脚本使用 sc.exe config 将 PimIndexMaintenanceSvc 服务启动类型配置为禁用:

sc.exe configure PimIndexMaintenanceSvc start= disabled

注意

后面的 = 空格是有意的。

使用组策略首选项管理模板服务

如果无法使用安全模板禁用每用户服务,请使用组策略首选项。

  1. 打开组策略管理控制台 (gpmc.msc) 。

  2. (GPO) 或使用现有 GPO 创建新的组策略对象。

  3. 编辑 GPO 以启动组策略对象编辑器。

  4. 根据组策略的目标方式,在“计算机配置”或“用户配置”下浏览到“首选项”、“Windows 设置”,然后选择“注册表”。

  5. 转到 “操作 ”菜单,选择“ 新建”,然后选择“ 注册表项”。

    组策略管理编辑器屏幕截图,其中突出显示了注册表首选项上的上下文菜单以创建新的注册表项。

  6. 对于 Hive, 请选择 HKEY_LOCAL_MACHINE

    “新建注册表”属性窗口的屏幕截图,其中突出显示了设置为“HKEY_LOCAL_MACHINE”的 Hive 值。

  7. 选择“键路径”旁边的省略号 (...) 。 浏览到 System\CurrentControlSet\Services ,然后选择用户服务模板。 例如,PimIndexMaintenanceSvc。 在值列表中,突出显示 “开始 ”并选择“ 选择”。

    “注册表项浏览器”窗口的屏幕截图,其中选择了 PimIndexMaintenanceSvc 注册表项,并选择了“开始”值。

  8. “开始属性” 窗口中,将 值数据00000003 更改为 00000004 ,然后选择 “确定”。 请注意,将“值数据”设置为 “4 = 已禁用”。

    “开始”属性窗口的屏幕截图,其中突出显示了值数据字段,值00000004。

    注意

    服务启动值为 4Disabled

  9. 若要添加无法使用组策略模板管理的其他服务,请编辑策略并重复上述步骤。

使用 Windows 注册表管理用户服务模板

如果无法使用组策略首选项来管理每用户服务,可以编辑 Windows 注册表。 若要禁用用户服务模板,请将每个服务的启动类型更改为 4,即 “已禁用”。

注意

除非没有其他替代方法,否则不要直接编辑注册表。 注册表编辑器或 Windows 不会验证这些对注册表的手动修改。 可能会存储不正确的值,这可能会导致系统中无法恢复的错误。 如果可能,请使用组策略或其他受支持的 Windows 工具来完成这些任务,而不是直接编辑注册表。 如果必须编辑注册表,请格外小心。

示例 1:使用 reg.exe 命令行命令编辑注册表

  1. 以管理员身份运行 cmd.exe 以打开 Windows 命令提示符。

  2. 以下示例包含多个命令,这些命令通过在 Windows 注册表中将其 “开始” 值更改为 4来禁用指定的 Windows 服务:

REG.EXE ADD HKLM\System\CurrentControlSet\Services\CDPUserSvc /v Start /t REG_DWORD /d 4 /f
REG.EXE ADD HKLM\System\CurrentControlSet\Services\OneSyncSvc /v Start /t REG_DWORD /d 4 /f
REG.EXE ADD HKLM\System\CurrentControlSet\Services\PimIndexMaintenanceSvc /v Start /t REG_DWORD /d 4 /f
REG.EXE ADD HKLM\System\CurrentControlSet\Services\UnistoreSvc /v Start /t REG_DWORD /d 4 /f
REG.EXE ADD HKLM\System\CurrentControlSet\Services\UserDataSvc /v Start /t REG_DWORD /d 4 /f
REG.EXE ADD HKLM\System\CurrentControlSet\Services\WpnUserService /v Start /t REG_DWORD /d 4 /f

示例 2:使用注册表编辑器用户界面编辑注册表

  1. 以管理员身份运行 regedit.exe 以打开注册表编辑器。

  2. 浏览到 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services ,然后选择用户服务模板。 例如,CDPSvc

  3. 在值列表中,打开 “开始 ”值。

  4. 值数据 更改为 4

注册表编辑器打开的屏幕截图,HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\CDPSvc 并突出显示设置为 4 的“开始”值。

示例 3:阻止创建每用户服务

用户可以在用户登录时阻止 Windows 创建每用户服务。 在注册表的同一服务模板节点中,将 设置为 UserServiceFlags0

注册表编辑器打开的屏幕截图,HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\PimIndexMaintenanceSvc 突出显示 UserServiceFlag 设置为 0。

后续步骤

有关禁用 Windows Server 系统服务的详细信息,请参阅 有关使用桌面体验在 Windows Server 上禁用系统服务的指南