
HDC 端口 8710 被 svchost.exe 占用问题排查记录环境系统Windows 11 专业版 (Build 26200)从 Win10 升级而来HDC 路径E:\KH\开发工具包\hdc\hdc.exe问题开机后hdc list targets无法识别设备端口 8710 被svchost.exe占用。杀掉后恢复重启复现。根因Win11 将 TCP 动态端口范围从 Win10 的 49152-65535 调低为 1024-15001导致 8710 落入动态分配范围。Windows 的IP Helper 服务iphlpsvc开机自启时从该范围随机分配到 8710抢占了 HDC 端口。定位命令wmicprocesswhere ProcessId占用PID get CommandLine/format:list# 结果svchost.exe -k NetSvcs -p -s iphlpsvc解决方案1. 调整动态端口范围起始值从1024改为10000netsh int ipv4setdynamic tcpstart10000 num55536 netsh int ipv4setdynamic udpstart10000 num555362. 禁用 IP Helper 服务scconfig iphlpsvcstart disabled不使用 IPv6 隧道/Teredo 则无影响。恢复sc config iphlpsvc start auto3. HDC 端口环境变量提升为系统级系统中存在用户级HDC_SERVER_PORT7035DevEco Studio 读不到其内置 HDC 仍用默认 8710。setx HDC_SERVER_PORT 7035/M自动化脚本把这个脚本保存为本地bat直接执行会自动拉起hdc服务前提是你的系统环境变量配置了hdcecho off setlocal enabledelayedexpansion chcp 65001 nul 21 set L1 set L2 HDC 设备识别自动排查与修复脚本 set L3 当 hdc list targets 无法识别设备时 set L4 自动排查服务和端口问题并尝试修复 set L5 echo !L1! echo !L2! echo !L3! echo !L4! echo !L5! set PORT8710 set MAX_RETRY3 :: Step 0: 检查 hdc 命令是否可用 echo. set M0[!time:~0,8!] 检查 hdc 命令是否可用 echo !M0! where hdc nul 21 if errorlevel 1 ( set M1 [FAIL] hdc 命令未找到 set M2 请将 hdc.exe 所在目录添加到系统 PATH 环境变量中 echo !M1! echo !M2! pause exit /b 1 ) else ( for /f tokens* %%p in (where hdc) do ( set M3 [OK] hdc 路径: %%p echo !M3! ) ) :: 检查设备 set FOUND0 for /f tokens* %%a in (hdc list targets 2^^1 ^| findstr /v /c:connect failed) do ( set LINE%%a if not !LINE! if not !LINE![Empty] ( set FOUND1 echo %%a ) ) if !FOUND!1 ( set M4 [OK] 设备已连接 echo !M4! pause goto :eof ) set M5 [WARN] 未识别到设备开始排查... echo !M5! :: Step 1: 检查端口占用 echo. set M6[!time:~0,8!] 检查端口 %PORT% 占用情况 echo !M6! set CONFLICT0 for /f tokens5 %%a in (netstat -ano ^| findstr /r /c::%PORT% .*LISTENING) do ( set PID%%a if not !PID!0 ( for /f tokens1 %%n in (tasklist /FI PID eq !PID! /NH 2^nul) do ( set PNAME%%n if /i not !PNAME!hdc.exe ( set M7 [WARN] 端口被 !PNAME! ^(PID: !PID!^) 占用 echo !M7! set CONFLICT1 taskkill /F /PID !PID! nul 21 set M8 [OK] 已结束占用进程 echo !M8! ) ) ) ) if !CONFLICT!0 ( set M9 [OK] 端口 %PORT% 未被其他程序占用 echo !M9! ) :: Step 2: 重启 HDC Server 进程 echo. set M10[!time:~0,8!] 重启 HDC Server 进程 echo !M10! set SERVER_OK0 tasklist /FI IMAGENAME eq hdc.exe 2nul | find /I hdc.exe nul if not errorlevel 1 ( set M11 [INFO] 发现已有的 hdc 进程正在结束... echo !M11! taskkill /F /IM hdc.exe nul 21 timeout /t 1 /nobreak nul ) set M12 [INFO] 启动 hdc server... echo !M12! hdc start nul 21 timeout /t 2 /nobreak nul tasklist /FI IMAGENAME eq hdc.exe 2nul | find /I hdc.exe nul if not errorlevel 1 ( set M13 [OK] HDC Server 启动成功 echo !M13! set SERVER_OK1 ) else ( set M14 [FAIL] HDC Server 启动失败 echo !M14! pause exit /b 1 ) :: Step 3: 重新检查设备 set RETRY1 :retry_loop if !RETRY! gtr %MAX_RETRY% goto :retry_done echo. set M15[!time:~0,8!] 第 !RETRY!/%MAX_RETRY% 次尝试识别设备... echo !M15! timeout /t 2 /nobreak nul set FOUND0 for /f tokens* %%a in (hdc list targets 2^^1 ^| findstr /v /c:connect failed) do ( set LINE%%a if not !LINE! if not !LINE![Empty] ( set FOUND1 echo %%a ) ) if !FOUND!1 ( set M16 [OK] 设备已连接 echo !M16! pause goto :eof ) set /a RETRY1 goto :retry_loop :retry_done :: Step 4: 检查驱动状态 echo. set M17[!time:~0,8!] 检查 USB 驱动状态 echo !M17! pnputil /enum-devices /connected | findstr /i HDC nul if not errorlevel 1 ( set M18 [OK] 发现 HDC 相关 USB 设备 echo !M18! ) else ( set M19 [WARN] 未发现 HDC 相关 USB 设备请检查驱动或连接 echo !M19! ) echo. echo !L1! set M20 排查结束: HDC Server 运行正常但仍未发现设备 set M21 请尝试以下操作: set M22 1. 重新插拔 USB 数据线 set M23 2. 更换数据线或 USB 接口 set M24 3. 检查设备端是否开启调试权限 echo !M20! echo !M21! echo !M22! echo !M23! echo !M24! echo !L1! pause exit /b 1