本文介绍如果事件 ID 8198 包含错误代码 0xC0020017 或 0x8007139F,应如何解决该问题。 这些代码在此事件中发生时,表示Windows KMS 客户端无法联系密钥管理服务(KMS)进行激活。
本文中的故障排除步骤将带你逐步了解最常见的原因,包括 VPN 或隧道配置问题、客户端设置不正确以及网络连接问题。 这些步骤适用于物理计算机、本地虚拟机(VM)和Azure VM。
症状
尝试激活Windows系统时,标准 slmgr.vbs /ato 命令将返回一般故障代码。 但是,实际错误记录在应用程序日志中为事件 ID 8198。 事件内容类似于以下示例:
Source: Security-SPP
Event ID: 8198
Error code: <ErrorCode>
Description: License Activation failed. The Software Protection service reported that the computer couldn't be activated.
注释
在事件输出中, <ErrorCode> 表示多个错误代码之一。 对于本文中讨论的这个问题,错误代码为 0xC0020017 或 0x8007139F。
若要查看此事件,请在客户端上打开 Windows PowerShell,然后运行以下 cmdlet:
Get-WinEvent -FilterHashtable @{LogName='Application'; ProviderName='Security-SPP'; Id=8198} -MaxEvents 5 | Format-List TimeCreated, Message
原因
错误 0xC0020017 指示 KMS 客户端上的软件保护平台 (SPP) 服务无法联系 KMS 主机。 此错误在功能上类似于错误 0xC004F074,但它来自不同的代码路径。 SPP 事件管道报告此错误,而不是 System-Level 缓存 (SLC) API。
在以下任一情况下,可能会出现此问题:
- 防火墙阻止 KMS 流量:防火墙规则或网络安全组 (NSG) 规则阻止到 KMS 主机或服务的流量。
- 强制隧道:所有出站流量都通过 VPN 或类似技术路由,绕过 KMS 终结点。 例如,如果实现 DirectAccess、Always On VPN 或Azure ExpressRoute网关,可能会遇到此问题。
- DNS 解析失败:KMS 客户端无法连接到 DNS 服务器,或者 DNS 服务器无法解析 KMS 主机的地址(或Azure KMS 服务)(Azure VM)。
- 错误的 KMS 目标:客户端配置为使用特定的 KMS 主机,但 KMS 主机名不正确或无效。
- SPP 服务问题:SPP 服务本身可能处于停滞状态。
解决方案
若要排查和修复此问题,请使用以下步骤。 若要从此过程中获得最佳结果,请在受影响的计算机上安装 PsPing 工具。 如果你有自承载 KMS 服务器,请同时在该计算机上安装 PsPing 工具。
还应熟悉脚本slmgr。
Important
如果您遇到 Azure 虚拟机 (VM) 的 Windows 激活问题,请参阅 Azure 虚拟机上 Windows 激活问题的故障排除工具。
步骤 1:使用特定 KMS 主机激活
若要绕过自动发现过程,可以使用 slmgr 脚本指定 KMS 主机:
-
在客户端上打开管理命令提示符窗口。
-
若要清除任何现有的 KMS 主机设置,请运行以下命令:
cscript c:\windows\system32\slmgr.vbs /ckms -
若要指定用于激活的 KMS 主机,请运行以下命令:
cscript c:\windows\system32\slmgr.vbs /skms <KMSHost_fqdn>:<KMSHost_Port>注释
- 在此命令中,<KMSHost_fqdn>表示 KMS 主机的完全限定域名 (FQDN),而 <KMSHost_Port>表示 KMS 主机使用的端口。
- 若要使用 Azure KMS 服务激活 Azure VM,请对
azkms.core.windows.netKMSHost_fqdn< 使用 >,并对1688KMSHost_Port 使用 <。
-
若要重试以激活,请运行以下命令:
cscript c:\windows\system32\slmgr.vbs /ato -
若要检查问题是否再次出现,请在 PowerShell 命令提示符处运行以下命令:
Get-WinEvent -FilterHashtable @{LogName='Application'; ProviderName='Security-SPP'; Id=8198} -MaxEvents 1 | Format-List TimeCreated, Message
如果激活过程仍生成事件 ID 8198(错误代码 0xC0020017 或 0x8007139F),请转到步骤 2。
步骤 2:检查 VPN、直接访问、强制隧道或类似配置
如果虚拟网络通过网关(强制隧道)路由所有客户端流量,则必须免除 KMS 流量。
-
查看隧道配置,并确保激活流量可以直接通过客户端和 KMS 主机之间的端口 1688 传递。
例如,对于使用 Azure KMS 的 Azure VM,请添加用户定义的路由(UDR),用于将Azure KMS IP 地址的流量直接发送到 Internet。 有关如何为 Azure 配置此豁免的信息,请参阅强制隧道方案中的 Windows 激活失败。
-
若要重试激活Windows,请在客户端的命令提示符处运行以下命令:
cscript c:\windows\system32\slmgr.vbs /ato -
若要检查问题是否再次出现,请在 PowerShell 命令提示符处运行以下命令:
Get-WinEvent -FilterHashtable @{LogName='Application'; ProviderName='Security-SPP'; Id=8198} -MaxEvents 1 | Format-List TimeCreated, Message
如果激活过程仍生成事件 ID 8198(错误代码 0xC0020017 或 0x8007139F),请转到步骤 3。
步骤 3:重启 SPP 服务
在某些情况下,SPP 服务本身可能处于停滞状态。
-
若要重启 SPP 服务,请在客户端上的 PowerShell 命令提示符处运行以下命令:
Restart-Service sppsvc -Force -
等待 30 秒。
-
若要重试激活Windows,请在客户端的命令提示符处运行以下命令:
cscript c:\windows\system32\slmgr.vbs /ato -
若要检查问题是否再次出现,请在 PowerShell 命令提示符处运行以下命令:
Get-WinEvent -FilterHashtable @{LogName='Application'; ProviderName='Security-SPP'; Id=8198} -MaxEvents 1 | Format-List TimeCreated, Message
如果激活过程仍生成事件 ID 8198(错误代码 0xC0020017 或 0x8007139F),请转到步骤 4。
步骤 4:确保激活流量可以在客户端与 KMS 主机之间传递
-
在客户端上的命令提示符处运行以下命令:
psping <KMSHost-ip>:1688注释
- 在此命令中, <KMSHost_ip> 表示 KMS 主机的 IP 地址。
- 如果客户端是Azure VM,并且正在使用 Azure KMS 服务进行激活,请使用
20.118.99.224或40.83.235.53for <KMSHost-ip>。
-
如果使用自承载 KMS 主机,请在 KMS 主机上打开管理命令提示符窗口,然后运行以下命令:
psping <KMSClient-ip>:1688注释
在此命令中, <KMSClient_ip> 表示客户端的 IP 地址。
-
如果
psping任一情况下失败,请执行以下步骤:- 对于Azure VM,请检查可能影响 VM 的任何网络安全组(例如网络接口、子网或虚拟网络级别设置的 NSG)。 请确保任何 NSG 都允许在 UDP/TCP 端口 53 上的 VM 和 DNS 服务器之间传输流量。
- 请确保任何防火墙(包括客户端上的Windows防火墙)允许客户端与 UDP/TCP 端口 1688 上的 KMS 服务器之间的流量。
- 若要验证流量是否已解除阻止,请再次运行
psping。
-
若要重试激活Windows,请在客户端的命令提示符处运行以下命令:
cscript c:\windows\system32\slmgr.vbs /ato -
若要检查问题是否再次出现,请在 PowerShell 命令提示符处运行以下命令:
Get-WinEvent -FilterHashtable @{LogName='Application'; ProviderName='Security-SPP'; Id=8198} -MaxEvents 1 | Format-List TimeCreated, Message
如果激活过程仍生成事件 ID 8198(错误代码 0xC0020017 或 0x8007139F),请转到步骤 5。
步骤 5:检查 DNS 配置
-
若要检查 DNS 配置,请在客户端的命令提示符处运行以下命令:
nslookup <KMSHost_fqdn> <intendedDNS_name>注释
- 在此命令中,<KMSHost_fqdn>表示 KMS 主机的 FQDN,intendedDNS_name<>表示客户端应用来联系主机的 DNS 服务器的 FQDN 或 IP 地址。
- 如果客户端是使用 Azure DNS 服务的 Azure VM,请对
168-63-129-16intendedDNS_name< 使用 >。
-
如果客户端是Azure VM,并且使用的是 Azure KMS 服务,并且
nslookup命令失败,请参阅以下文章来排查 DNS 配置问题: -
在 KMS 主机上,打开管理命令提示符窗口,然后运行以下命令:
ipconfig /all此命令的输出应类似于以下示例:
DNS Servers . . . . . . . . . . . : 168.63.129.16DNS Servers . . . . . . . . . . . : 10.0.3.5 10.0.3.4注释
在此示例中,
168.63.129.16是AZURE VM 连接到Azure DNS基础结构时使用的 IP 地址。 其他 IP 地址表示自定义 DNS 服务器。 -
验证每个 DNS 服务器地址是否正确。
Important
对 Azure VM 使用自定义 DNS 服务器时,请不要在 VM 本身上配置 DNS 服务器设置。 在网络接口或虚拟网络级别指定 DNS 服务器。
-
如果 DNS 服务器地址列表为空或不包含正确的地址,请参阅以下文章了解详细信息:
-
如果更改任何 DNS 设置,请重启 KMS 主机。
-
KMS 主机重启后,打开管理命令提示符窗口,然后运行以下命令:
ipconfig /flushdns此命令刷新并重新生成 DNS 缓存。
-
若要重试激活Windows,请在客户端的命令提示符处运行以下命令:
cscript c:\windows\system32\slmgr.vbs /ato -
若要检查问题是否再次出现,请在 PowerShell 命令提示符处运行以下命令:
Get-WinEvent -FilterHashtable @{LogName='Application'; ProviderName='Security-SPP'; Id=8198} -MaxEvents 1 | Format-List TimeCreated, Message
如果激活过程仍生成事件 ID 8198(错误代码 0xC0020017 或 0x8007139F),请联系Microsoft 支持部门。