[Bug] v3.2.0 加速组件无法启动,提示“无法连接加速服务”:子进程继承系统级 DOTNET_ROOT,找不到随包 .NET 11 RC3
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 70/100
Direzione di ricerca
Inizia da DotNetRuntimeHelper.GetDotNetRoot() e dalla configurazione del processo figlio di IPCMainProcessServiceImpl descritta nel report. Segui come viene selezionato DOTNET_ROOT e passato a Steam++.Accelerator.exe, quindi verifica il comportamento di avvio dell’acceleratore con un DOTNET_ROOT a livello di macchina che punta a una directory di runtime senza .NET 11. L’obiettivo è raggiunto quando viene trovato il runtime .NET 11 incluso e l’acceleratore si avvia correttamente in questa configurazione.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
问题描述
升级到 3.2.0 后,进入「网络加速」页面一直显示:
无法连接加速服务。请检查加速组件是否正常启动,并允许管理员权限,然后重试。
多次重启、重新安装(包括把 3.2 装到一个全新目录)均无效;回滚到 3.1.0 立刻恢复正常,3.2.0 必现。
复现步骤
- 机器上有其他 .NET 安装,并存在机器级环境变量
DOTNET_ROOT=C:\Program Files\dotnet
(该目录只有 6.0.36 / 8.0.27 / 9.0.7 / 10.0.9,没有 .NET 11)。 - 安装 3.2.0(安装包
Steam++_v3.2.0_win_x64.exe,FileVersion 3.2.1.0),
安装目录下自带运行时dotnet\shared\Microsoft.NETCore.App\11.0.0-rc.3.26522.148是存在的。 - 启动 Watt Toolkit,打开「网络加速」。
- 提示无法连接加速服务,任务管理器中
Steam++.Accelerator.exe不存在(启动即退出)。
期望行为
加速组件正常启动,网络加速可用。
根本原因
3.2.0 的 Steam++.Accelerator.exe 是 framework-dependent 单文件应用,
runtimeconfig 要求 Microsoft.NETCore.App 11.0.0-rc.3.26522.148。
主程序启动加速组件时走:
IPCMainProcessServiceImpl → DotNetRuntimeHelper.AddEnvironment(psi)
而 DotNetRuntimeHelper.GetDotNetRoot() 优先读取环境变量 DOTNET_ROOT,
再用 psi.Environment.TryAdd("DOTNET_ROOT", 值) 传给子进程:
static string? GetDotNetRoot()
{
var value = Environment.GetEnvironmentVariable("DOTNET_ROOT"); // ← 优先环境变量
if (string.IsNullOrWhiteSpace(value))
{
var location = typeof(object).Assembly.Location; // ← 实际运行时(正确的)
value = Path.GetFullPath(Path.Combine(location, "..", "..", "..", ".."));
}
return value;
}
本机 DOTNET_ROOT 指向 C:\Program Files\dotnet(没有 .NET 11),
加速组件的 apphost 因此忽略安装目录自带的 dotnet\,直接报找不到框架并退出,
主程序等不到 IPC 连接,就显示「无法连接加速服务」。
3.1.0 没暴露这个问题的原因是它的 runtimeconfig 要求 .NET 10.0,
系统里的 10.0.9 可以 roll-forward;3.2.0 升到 11.0.0-rc.3 后就找不到匹配版本了。
证据
1)COREHOST 跟踪(COREHOST_TRACE=1,直接运行 3.2 的加速组件)
Using environment variable DOTNET_ROOT=[C:\Program Files\dotnet] as runtime location.
Attempting to read runtime config: ...\modules\Accelerator\Steam++.Accelerator.runtimeconfig.json
--- The specified framework 'Microsoft.NETCore.App', version '11.0.0-rc.3.26522.148' ...
No match greater than or equal to [11.0.0-rc.3.26522.148] found.
Framework reference didn't resolve to any available version.
It was not possible to find any compatible framework version
You must install or update .NET to run this application.
注意:同目录自带的 dotnet\shared\Microsoft.NETCore.App\11.0.0-rc.3.26522.148 完全没有被搜索。
2)同一组参数手动运行加速组件(pipe 名 + 主进程 PID)
| 程序 | 环境 | 退出码 |
|---|---|---|
3.2 Steam++.Accelerator.exe |
继承系统 DOTNET_ROOT=C:\Program Files\dotnet |
-2147450730 (0x80008096) 启动失败 |
3.2 Steam++.Accelerator.exe |
DOTNET_ROOT=E:\watt\Steam++\dotnet |
4043 正常进入业务逻辑 |
3.1 Steam++.Accelerator.exe |
继承系统 DOTNET_ROOT=C:\Program Files\dotnet |
4001 正常进入业务逻辑 |
3)端到端验证修复方向
用进程级环境变量 DOTNET_ROOT=<安装目录>\dotnet 启动 3.2 主程序后,
Steam++.Accelerator.exe 成功启动并保持运行,网络加速恢复正常,问题不再出现。
(只对本次进程树生效,没有修改系统环境变量。)
建议修复
DotNetRuntimeHelper.GetDotNetRoot()改为优先使用当前进程实际加载的运行时
(typeof(object).Assembly.Location向上四级),DOTNET_ROOT只作为兜底;- 或者把
TryAdd改为直接赋值psi.Environment["DOTNET_ROOT"] = 实际运行时根目录,
保证加速组件和主程序使用同一套运行时; - 启动 Accelerator 时也可以显式设置
DOTNET_ROOT = <安装目录>\dotnet。
其它建议
3.2.0 出现问题时,%TEMP%\Steam++\Logs 下没有任何新日志(3.1.0 有),
排查时完全没有线索;建议 IPC / 子进程启动失败时把子进程退出码、stdout/stderr
和日志路径带到提示框或日志里,否则「请检查加速组件是否正常启动」这个提示无法定位问题。
环境信息
- OS: Windows 11 家庭中文版 26200
- Watt Toolkit: 3.2.0(安装包 FileVersion 3.2.1.0),安装目录
E:\watt\Steam++ - 系统 .NET(C:\Program Files\dotnet):6.0.36 / 8.0.27 / 9.0.7 / 10.0.9
- 程序自带 .NET:
10.0.3、11.0.0-rc.3.26522.148 - 机器级环境变量:
DOTNET_ROOT=C:\Program Files\dotnet - 3.1.0(同一目录、同一配置)完全正常
- Lingua principale
- C#
- Stelle
- 27.5k
- Fork
- 1.8k
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di BeyondDimension/SteamTools
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
BeyondDimension/SteamTools#4148 ·
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
BeyondDimension/SteamTools#4161 · 4 commenti ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
BeyondDimension/SteamTools#4160 ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 12/100
BeyondDimension/SteamTools#4159 ·
-
bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 72/100
BeyondDimension/SteamTools#4158 ·
Tutte le issue di BeyondDimension/SteamTools
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
nopSolutions/nopCommerce#8459 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
criticalmanufacturing/cli#909 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
RadicalCSG/com.chisel#312 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
eyalgolan/statecraft-israel#3093 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno