Skip to content

About

修复 Windows 11 26H1(build 28000+)上因系统升级损坏的 .NET Framework 3.5:离线、纯脚本、双击即用。Repair broken .NET Framework 3.5 on Windows 11 26H1 — offline, script-only, double-click to run.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

FixDotNet35 — .NET Framework 3.5 修复工具

适用系统: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 即可,本工具不适用。

使用方法

  1. 把整个压缩包完整解压到一个本地简单路径(例如 C:\DotNet35Fix 或桌面)。 不要在压缩包里直接双击运行,也不要放在网络共享或只读位置。

    如果 ZIP 是从网上传来的,先右键 ZIP → 属性 → 勾选底部「解除锁定(Unblock)」再解压, 否则 Windows 可能拦截脚本。

  2. 双击 FixDotNet35.cmd,在 Windows 弹出的 UAC 提示上点「是」。
  3. 等待修复完成,看到 [OK] .NET Framework 3.5 repaired successfully 即成功。 全程通常需要 10–30 分钟(8 个安装包逐个重装,其中 GAC 组件最慢); 每个包在装的时候,窗口会每分钟打印一次 ... still installing (N min elapsed) 心跳, 看到它就是在正常干活——千万不要关闭窗口。 一般不需要重启;若输出里出现 restart 提示,则重启一次。

    若检测到系统本来就健康,工具会先询问是否仍要强制修复——直接回车即退出、不做任何修改。

  4. 过程日志写在同目录 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 功能"):

官方安装包(供从未装过 .NET 3.5 的机器使用):

下载后双击、按向导装完即可,通常不用重启;装好后老程序应能直接使用。 之后再遇到"系统升级把 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)。


English TL;DR

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.

About

修复 Windows 11 26H1(build 28000+)上因系统升级损坏的 .NET Framework 3.5:离线、纯脚本、双击即用。Repair broken .NET Framework 3.5 on Windows 11 26H1 — offline, script-only, double-click to run.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages