VDHelper
VDHELPER · WINDOWS PC · 本机实测

「连不上」不是一个错误码,
是 36 条可检测的断链

VDHelper 是 Windows 端的 Virtual Desktop 串流检测 / 诊断 / 修复工具。它回答一个具体问题:为什么头显找不到这台 PC,或者找到了却连不上。本页所有数字都来自本机真实运行结果与仓库里可核实的语料,没有一条是估的。

本表是最初的 27 条设计清单。工具后来又加了检测项,现在每次体检实际跑的是 36 条(见下方本机实测)。差额的走向和「待实现」相反——是清单没跟上工具,不是工具没做完。本次体检到底跑了哪几项,以 --selftest 的输出为准。

0
条已实装检测项
(每次体检都跑)
0
条真实用户失败描述
(来自 79 个完整帖子)
0
条症状→根因条目
(S1–S7 分诊表逐表数出)
0
个根因完全未覆盖
(覆盖度小结口径:共 23)

本机最近一次体检结论

下面这段是从 docs/checks.md 读进来的真实运行结果,不是宣传语。该文件本身由 tools/export-checks.ps1 执行 VdHelper.exe --selftest 生成。

阻断:有检查项失败,串流很可能起不来

原始行:VDHelper selftest verdict=Blocked 阻断:有检查项失败,串流很可能起不来

0
通过 / 共 36 项
0
警告
0
阻断
0
信息不足(Unknown)
状态编号结论
通过net-primary1 块网卡可用,主用 Ethernet (192.168.11.2)
警告net-apipa3 块离线网卡持有 APIPA 地址(Ethernet 2、Wi-Fi、Bluetooth Network Connection)
警告net-virtual2 块虚拟网卡启用中:vEthernet (Default Switch)、vEthernet (WSL (Hyper-V firewall))
通过net-profile主网卡网络类别:专用网络 (Private)
通过fw-vd找到入站放行规则(Virtual Desktop Streamer True Inbound Allow)
警告fw-defenderDefender 防火墙:Domain True / Private False / Public False
通过svc-vdVirtualDesktop.Service.exe Running Automatic
通过port-vd4 个端口由 Virtual Desktop 持有,没有被别的程序抢占
通过session-stale当前没有活动会话;1 个残留通道都不在本网段(是连官方服务器留下的,不是头显)
通过streamer-procStreamer 进程运行中(1 个)
警告svc-log服务日志有 5 条历史 ERROR(最近一次 2026-09-18 15:37:35.6962),但 Streamer 正在运行
通过udp-discoveryUDP 38850 正在监听(发现/配对协议就绪)
警告cfg-streamerShowPairingRequests=false:靠弹窗配对新头显会被静默忽略(靠名字在客户端选则不受影响);DontWarnApps 含 NetworkProfile:官方自己的网络告警被屏蔽了;AutoAdjustBitrate=false:自动调码率已关,卡在「measuring bandwidth」时社区的首选解法就是把它打开
警告icsSharedAccess(ICS):Running
通过fw-outbound出站策略:Domain NotConfigured / Private NotConfigured / Public NotConfigured
通过av已注册杀软:Windows Defender(productState 原值见下方原始输出,未解码:那是各版本含义不一的位掩码)
通过route-metric有线网卡优先级 10,没有虚拟网卡排在它前面
未知usb-headset这台电脑上没有枚举到 USB 方式的头显
通过link-typePC 走有线(Ethernet)
阻断lan-reach头显 192.168.11.14 ping 不通(ARP 缓存里也没有它)
通过link-rateEthernet 协商速率 1 Gbps
通过vpn-proc没有发现 VPN/代理客户端进程
通过rdp-session只有本机 console 会话(1 条),没有远程桌面在跑
通过nat-type路由器响应 UPnP 控制面(UPnP / SSDP),且当前有 38810 的入站映射;NAT 类型这一项没有测(需要映射行为探测或 STUN,本检查只读了两项);外网 IP 是 172.16.80.42(私有段),上级还有一层 NAT——这只影响异地连接,不影响同网段
通过fw-pair入站放行有效(Virtual Desktop Streamer),没有针对 VD 的出站拦截
通过accounts-persisted配对信息已落盘(OculusQuest 1 条、Oculus 3 条),设备名 Meta Quest 3
警告fw-profile-inboundprofile 默认入站:Domain True NotConfigured / Private False NotConfigured / Public False NotConfigured
警告gpu-pickVirtual Desktop Monitor
警告proc-tuner按进程名命中硬件调校类 7 个(未测 CPU 占用或线程优先级,只按名字匹配)
未知nic-powersave读不到网卡电源管理属性
警告display-inventoryVirtual Desktop Monitor(Error)
通过cfg-versionStreamer 版本 1.34.22.0
通过gpu-encoder硬件编码器空闲(当前 0 个编码会话)
通过gpu-throttleGPU 跑在最高频率的 64%,占用 4%、温度 50°C。驱动没有报任何降频原因——不是被压着。
未知wifi-quality无线未连接(disconnected),这一项没有测到任何链路数据
警告net-loss头显 192.168.11.14 完全不应答(0 收到)

检测项的完整定义(症状 / 命令 / 判据 / 修复 / 回滚 / 风险)见 检测项全表;参数项与头显侧规则见 checks.md 末尾的三处指向。

三个界面

屏回答什么需要什么
本机体检PC 侧网卡 / 防火墙 / 服务 / 配置 / GPU 有没有断链(判定项 36 项)无
串流参数Streamer 111 个配置键的当前值与含义(DPAPI 密文不显示)无
头显诊断通过 adb 读头显的包、权限、网络,并判断应用进程是否还活着头显 USB 连接并授权
↑ 第三屏也可以直接命令行跑:VdHelper.exe --adb,输出可直接贴进 issue,不必截图

顶部常驻总判定:可串流 / 有隐患 / 阻断。本页结论行即来自该判定。

用户说的七种症状,其实只有 7 类

语料里能归并出 7 个症状类 + 12 个子症状。左边是用户嘴里的话,右边是工具必须拿到的状态 —— 两边对不上,说明这类症状还没被测到。

症状类用户会怎么说(真实措辞)判定信息(VDHelper 需要拿到的)
S1 看不见电脑"no computer found" / "no computer detected" / "big yellow sign" / "doesn't see the PC" / "servers unreachable, only showing local computers"头显端收到零个广播应答;PC 侧 UDP 38850 是否在发
S2 连不上"computer is unreachable" / "PC is unreachable" / "failed to see any computer at all" / "can't connect to a computer contact support"收到了应答但后续 TCP 握手失败
S3 说不在同一网络"not on same network" / "not on same local network"两端子网 / AP 隔离
S4 卡在测速"stuck on measuring bandwidth" / "won't get past "measuring bandwidth"" / "keeps measuring bandwidth"带宽探测阶段超时
S5 有画面但黑 / 无画面"black screen" / "blank screen" / "I can hear audio, but no visuals" / "shows no display"音视频分离 → 解码/显示器/编码器
S6 连上就掉 / 定时卡"keeps disconnecting" / "disconnects after 30 seconds" / "freezes exactly at 5-7 mins" / "60-Second Stutter" / "The first time I tried it, it worked perfectly for hours, hasn't worked since"周期性 → 时序特征
S7 画面质量差 / 不跟手"choppy" / "stutter" / "bitrate only 60-70" / "black bars when turning my head" / "blurry"抖动/丢包/解码耗时

每一类症状背后的多个工程根因,见 常见问题 · 症状词典 与 分诊表。

先纠正三条最贵的误会

这几条在社区里出现频率最高,而且对同一网段内的本地串流无效或有害。完整立场写在 常见问题 · 社区常见的错误解法,那里逐条写了「为什么错 / 正确说法是什么」。

3.1

端口转发 38810/38820/38830/38840

本地场景完全无关

正确说法:先判定场景。PC 与头显同网段 → 不需要任何端口转发;异地 → 需要转发 TCP 38810/20/30/40,且 Streamer 需勾选 "Allow remote connections"。开发者本人在 R29 明确说过 "You don't need to forward ports to connect to Shadow."

3.2

开 UPnP

方向搞反了,且被用户误解成"开网络发现"

正确说法:本地场景不开 UPnP;远程场景优先静态 IP + 精确端口转发。R22 那条"禁用 UPnP 改手动转发"的建议是对的,且与开发者口径一致。

3.3

关防火墙全 profile

掩盖问题,且往往无效

正确说法:保持防火墙开启,改成检测哪条规则缺失。R19 是语料中唯一一个"关防火墙只是诊断手段、正确解法是补规则"的完整案例——这就是 VDHelper 应该给用户的答案。

它不做什么