适用系统:Windows 11 26H1(内部版本号 ≥ 28000),含 Insider 预览版 查看自己的版本:
Win+R输入winver,或「设置 → 系统 → 关于」里的"内部版本" 需要管理员权限(双击后会自己请求提权)
在 Windows 11 26H1 上,.NET Framework 3.5 不再是"Windows 功能"里的一个勾选项,而是以独立安装包(每月的累积更新,如 KB5087077、KB5120747)的形式分发。
每次 Windows 大版本 / 预览版升级,升级程序可能会删掉 .NET 3.5 的程序文件,却把"已安装"的注册信息留在 MSI 数据库里。 系统因此进入一种"半损坏"状态:
- 注册表
HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5消失 C:\Windows\Microsoft.NET\Framework64\v2.0.50727、...\v3.5等目录被清空- 但 MSI 数据库和"设置 → 应用"里,8 个 "Microsoft .NET Framework 3.5 …" 组件仍然显示已安装
结果:任何安装程序(包括微软官方的 DotNet35Setup.exe 和语言包安装器)都会把 .NET 3.5 当作"已存在"而跳过安装——表面"成功",实际一个文件都没装。
- 老软件启动时报错,提示需要 .NET Framework 3.5
- 安装
.NET Framework 3.5 语言包时报「需要安装 Microsoft .NET Framework 3.5」 - 在"启用或关闭 Windows 功能"里根本找不到 ".NET Framework 3.5" 这一项(26H1 已取消该功能)
- 从网上下载的
DotNet35Setup.exe双击后一闪而过 / 瞬间"完成",再检查系统里仍然没有 3.5
如果你是在 Windows 11 24H2 / 25H2 等较旧版本上想启用 .NET 3.5,那是另一回事:那些系统里它还是可选功能,用「Windows 功能」或
DISM /Online /Enable-Feature /FeatureName:NetFx3 /All即可,本工具不适用。
- 把整个压缩包完整解压到一个本地简单路径(例如
C:\DotNet35Fix或桌面)。 不要在压缩包里直接双击运行,也不要放在网络共享或只读位置。如果 ZIP 是从网上传来的,先右键 ZIP → 属性 → 勾选底部「解除锁定(Unblock)」再解压, 否则 Windows 可能拦截脚本。
- 双击
FixDotNet35.cmd,在 Windows 弹出的 UAC 提示上点「是」。 - 等待修复完成,看到
[OK] .NET Framework 3.5 repaired successfully即成功。 全程通常需要 10–30 分钟(8 个安装包逐个重装,其中 GAC 组件最慢); 每个包在装的时候,窗口会每分钟打印一次... still installing (N min elapsed)心跳, 看到它就是在正常干活——千万不要关闭窗口。 一般不需要重启;若输出里出现 restart 提示,则重启一次。若检测到系统本来就健康,工具会先询问是否仍要强制修复——直接回车即退出、不做任何修改。
- 过程日志写在同目录
logs\里。
命令行参数(可直接跟在启动器后面,会随提权一起传递):
| 命令 | 作用 |
|---|---|
FixDotNet35.cmd -Force |
即使检测为"健康"也强制修复一遍 |
FixDotNet35.cmd -DiagnoseOnly |
只诊断、不做任何修改 |
如果工具说 "looks healthy"(看起来健康)但你的程序仍然报错,就用 -Force 强制修复一次;
-DiagnoseOnly 的输出可以截图或复制发回给分享者。
针对"文件被删但注册信息还在"的状态,用 C:\ProgramData\Package Cache 中系统缓存的官方 MSI 包做一次强制重装,把丢失的文件补回来、把注册表项重写:
msiexec /i <缓存的 DotNet35*.msi> REINSTALL=ALL REINSTALLMODE=vomus /qn
技术细节(供排查参考):这些 MSI 带一个启动条件 InstallFromBundle = 1,正常情况下只由微软安装器(Bundle)在运行时置位——它的自定义操作会检查
HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
下名字恰好是"带花括号的 38 位 GUID"的子键里是否存在名为 BundleResumeCommandLine 的值。本工具在修复期间随机生成一个这样的 GUID 子键作为标记(结束或失败时都会自动删除),从而让 MSI 允许被直接修复。
每个包的修复结果都会做双重验证:既看 msiexec 退出码,也检查 MSI 日志里是否出现自定义操作写下的 Found expected value in subkey 一行——只有两者都满足才算真正放行;若标记未被识别,输出会明确提示并把线索记录在日志里。
适用:机器以前装过 .NET 3.5(所以 C:\ProgramData\Package Cache 里有 DotNet35*.msi),且处于上述"半损坏"状态。
不适用:
- 从未装过 .NET 3.5 的机器——缓存里没有 MSI,工具会明确提示。这种机器请先安装一次微软官方的 .NET 3.5 独立安装包(见文末「官方资料」),之后再遇到升级损坏,才是本工具的用武之地。
- 其他类型的 .NET 问题(例如 .NET 4.x 报错、系统组件损坏)——本工具只处理 26H1 系列的 .NET 3.5。
注意:
- 本工具依赖微软当前的打包方式(MSI 自定义操作的行为)。若未来更新改变了这个机制,修复会失败并给出明确提示,把
logs\发回即可。 - 每次 Windows 升级之后都要重装或修复一次——这不是工具的缺陷:微软官方 FAQ 原文就写着 "When you upgrade Windows to the next release, reinstall .NET Framework 3.5"(升级不会保留 .NET 3.5)。
- 杀毒软件误报 / 拦截:这是纯脚本工具(一个
.cmd+ 一个.ps1),没有网络代码,可能被启发式规则误报,允许即可;不放心可以自己打开.ps1阅读。 - 窗口一闪而过:通常是被杀软/系统策略在提权前拦下了(提权被取消时窗口会停留并提示按回车关闭)。把工具放到本地简单路径、并给杀软放行后重试。
- 提示找不到 MSI 包:见上文「不适用」第一条,需要先安装一次官方的 .NET 3.5 独立安装包。
- 个别包失败 / 被要求发日志:把
logs\文件夹(不是整个工具文件夹)发回给你拿到这个工具的地方(原帖 / 群聊 / 分享者),再附一句现象描述即可;日志第一行就是你当前的 Windows 版本。日志默认写在工具目录的logs\;若工具目录不可写,会自动改写到%TEMP%\DotNet35Fix-logs。输出里已把常见 MSI 错误码翻译成人话(1603/1618/1622 等)。 - 中途不小心关掉了窗口:没关系。工具在修复期间临时写的注册表标记是良性的,下次运行会自动清理,重新跑一遍即可。
- 只想看状态、不改动任何东西:运行
FixDotNet35.cmd -DiagnoseOnly。
- 完全离线:不下载、不联网、不收集任何信息。
- 只做两件事:读取
Package Cache里的微软官方 MSI 并执行修复;临时写一个注册表标记(结束或失败时都会删除,被意外中断则由下次运行自动清理)。 - 日志仅写在工具目录(目录不可写时退回
%TEMP%\DotNet35Fix-logs)。 - 退出码(供批处理/脚本调用判断):
0= 修复成功;1= 未修复或被中止;2= 已修复但有异常(请查看日志)。-DiagnoseOnly恒返回 0。
欢迎随意转发、修改。
微软官方文档(26H1 起 .NET 3.5 只能以独立安装包形式安装,已不再是"Windows 功能"):
- 安装说明:https://learn.microsoft.com/zh-cn/dotnet/framework/install/dotnet-35-windows-11
- 常见问题(含"升级 Windows 后需重装 .NET 3.5"的官方说明):https://learn.microsoft.com/zh-cn/dotnet/framework/install/dotnet-35-windows-11-faq
官方安装包(供从未装过 .NET 3.5 的机器使用):
- 主程序 DotNet35Setup.exe(必需,约 100 MB):https://go.microsoft.com/fwlink/?LinkID=2337635
- 语言包 DotNet35LPSetup.exe(可选,约 143 MB;只有需要 .NET 3.5 的中文本地化对话框时才装):https://go.microsoft.com/fwlink/?linkid=2347312
下载后双击、按向导装完即可,通常不用重启;装好后老程序应能直接使用。 之后再遇到"系统升级把 3.5 弄坏",才是本工具的用武之地。
累积更新:如果需要单独下载最新一期补丁,到 Microsoft Update Catalog (https://www.catalog.update.microsoft.com)把产品类别切换到 ".NET Framework 3.5"(不要只看标题里带 "3.5" 的条目——有些标题同时写着 3.5 和 4.8.1,实际是 4.8.1 的更新), 选取与你的 Windows 版本对应、日期最新的一期。本文写作时(2026-09)经核验的最新 3.5 独立更新为 KB5120747(2026-08-11)。
社区案例:26H1 上"系统升级/覆盖安装后 netfx3.5 损坏、必须先修复安装否则语言包也装不上"的现象在社区同样有记录 (wvbtech 论坛讨论:https://community.wvbtech.com/d/4726/15)。
FixDotNet35 repairs a broken .NET Framework 3.5 on Windows 11 26H1 (build 28000+). After a Windows build upgrade, the .NET 3.5 files may be deleted while the MSI registrations remain, so every installer silently skips it. Extract the ZIP to a local folder and double-click FixDotNet35.cmd (it self-elevates; click Yes on the UAC prompt). It force-reinstalls the cached official MSIs; the whole run usually takes 10–30 minutes with long quiet periods — do not close the window. Fully offline. Logs go to logs\. For everything else, see the Chinese sections above.