Setup.exe应该用在哪?Windows.old文件夹非有不可吗?PE何时派上用场?细聊Windows系统升级机制

Setup.exe应该用在哪?Windows.old文件夹非有不可吗?PE何时派上用场?细聊Windows系统升级机制

本文开始时,先给你制造一些混乱.

Windows更新的方法和步骤你都听说过哪些?

  • 设置中”更新和安全”在线下载安装更新
  • 使用离线下载的更新包
  • 使用Windows ISO安装镜像
  • 在当前系统原位更新
  • PE系统离线注入更新
  • 使用DISM命令更新整合包
  • Dism++安装更新
  • 双击更新包进行更新
  • ……

上面的方法真真假假,适用范围又各有不同.

今天笔者带你详细的了解一下,到底Windows更新哪些操作是必要的,哪些操作是不被允许的,微软和Windows的更新逻辑又是怎么样的.

正片开始


法则一:你永远不可能

你永远不可能使用ISO安装镜像在一个PE系统里离线升级Windows系统.

举例:

我的系统目前的版本是Windows10 22H2 19045.2262.我有一个Windows10 22H2 19045.6693的Windows ISO.我想用这个ISO升级我的Windows.

别想了,在PE里,完全无法做到更新这个Windows.因为使用完整的Windows安装映像升级Windows的时候,Windows升级并不等于单纯的文件替换.

※※ Windows 的“升级”本质是一个 运行中的安装程序(setup.exe)驱动的状态机

  • 扫描当前系统
  • 判断可升级性
  • 迁移注册表
  • 迁移用户配置信息
  • 写入新的版本信息
  • 创建回滚还原点(Windows.old)

这些事情,只有setup.exe能够做到.

想必你也能理解了,setup.exe想要做到以上的事情,就必须要在一个”活的灵魂”上面运行.也就是他必须要在Windows系统里面运行,才能完成升级.在PE里的setup.exe是无法运行”升级Windows”的.

DISM永远也做不到上面的事情.DISM能做的最多的是替换文件.使用

1
2
dism /image:C:\ /apply-image imagefile:E:\sources\install.wim index:1 applydir:C:\windows
DISM /Cleanup-Image /ResetBase

以上这两个命令,可以在PE中把离线Windows的winSxS系统组件更新到最新ISO里的版本.但是dism没有能力完全配置Windows升级,单纯的更新组件并不是升级Windows.这样的操作看似替换了系统文件,实际上再启动Windows后查看系统的版本,版本号不会发生变化,系统也不会发生改变.

简单来说:

DISM =

  • 离线部署
  • 文件/组件级
  • 不负责系统“身份变更”

setup.exe =

  • 运行安装
  • 负责升级、迁移、回滚、版本写入

所以你把新系统文件“铺”进旧系统里,Windows 认为:我看到文件变了,但我没经历升级.

在PE里,Windows系统处于离线状态.我们只能部署,修复,覆盖Windows,而不能回滚,升级Windows.

升级Windows永远是Windows在线时才能进行的事情.

升级Windows永远只是setup.exe能做的事情.

所以,请记住:

你永远不可能使用ISO安装镜像在一个PE系统里离线更新Windows系统!

如果我们在PE里面运行setup.exe,选择保留个人文件和应用的升级方式安装Windows,那setup.exe直接报错:无法在WindowsPE环境下升级Windows.需要在Windows正常运行的环境中升级Windows.

你看微软都直接报错了,说明这事真的没法子了.


法则二:你永远不可能

你永远不可能阻止Windows.old文件夹产生.

只要是升级Windows,那么Windows.old文件夹就一定会出现.

  • 升级前旧系统 = 回滚基础
  • 回滚基础 = Windows.old
  • 没有 Windows.old = 不允许升级

这是setup.exe内部强制逻辑.

我们唯一能做的,就是在Windows升级后及时把Windows.old文件夹删除.

C盘右键→属性→磁盘清理→清理系统文件→勾选Windows.old


法则三:你可以

你可以在PE系统中使用dism给Windows系统打更新补丁包.

在 PE 里能成功安装的,通常是这些种类的补丁包文件:

  • .msu
  • .cab
  • 累积更新(LCU)
  • 安全更新
  • .NET 更新
  • Servicing Stack Update(SSU)

用的工具通常是:

1
DISM /Image:C:\ /Add-Package /PackagePath:xxx.cab

或者Dism++直接导入.

更新包 ≠ 新 Windows
它只是在同一个身份下换组件.

一个特别关键、但很少有人注意到的事情:

你在 PE 里装更新包时,其实:

  • 更新并没有真正完成
  • 它只是:
    • 导入新的WinSxS文件
    • 标记为 Pending(预约状态)
    • 等待下次正常启动

真正完成更新的是:

  • TrustedInstaller
  • Windows Modules Installer
  • Session Manager

PE 只是预约了更新,

真正执行更新是在正常系统启动后.


※ 所以能够正常更新Windows的方法剩下了什么

  • 使用Windows更新包在PE系统里安装更新.
  • 使用Windows更新包在Windows系统里安装更新.
  • 使用setup.exe在Windows系统里运行,选择保留个人文件和应用.

只有以上三种!!!


为什么setup.exe更新一次Windows那么慢?

不是因为拷文件慢,而是因为它在“证明自己没把你系统弄坏”.

setup.exe做的事情远不止释放文件到C盘.事实上:

  • 全系统兼容性扫描
  • 用户态 + 系统态双迁移
  • 应用迁移(这是最慢的部分)
  • 驱动重枚举
  • 回滚系统构建
    • Windows.old
    • 回滚 BCD
    • 回滚注册表快照

“我得保证你升级前的一切还能用.”

一致性验证,永远慢。

Windows.old 本身,也在拖慢升级:

在升级过程中:旧系统并不是简单移动,而是分批复制,校验,标记可回滚点


如果不勾选保留用户文件和应用程序,那还会有Windows.old吗?

是的,即使你不勾选保留个人文件和应用程序,依然会有 Windows.old.

不勾选保留个人文件和应用程序,Windows 仍然会:

  • 把旧系统整体打包
  • 放进 C:\Windows.old
  • 作为回滚基础

如果C盘空间不够了放不下Windows.old怎么办?

1️⃣ 直接拒绝升级

2️⃣ 升级中途失败并回滚

3️⃣ 强制你先释放空间,否则不让继续


你的反驳

你可能会说:我曾经在PE系统里使用Dism++的”释放映像”/“系统还原”功能释放了新版本系统的wim/esd文件,在**不勾选”格式化”**的情况下,根目录里生成了Windows.old.001文件夹,里面的内容就是原来版本的系统.

那你说为什么他命名为Windows.old.001,而不是Windows.old呢?

你还会说:我在启动系统后,使用”磁盘清理”,也扫描到了”以前安装的Windows系统文件“,也就是Windows.old.001文件夹,可以选择删除.

是的,DISM / DISM++ 也可以生成一个看起来像 Windows.old 的文件夹.

但它生成的不是“升级回滚用的 Windows.old”,而是:一个“被 Windows 识别为旧系统残留”的目录

所以,这个Windows.old.001不能用于回滚,只是一个Windows的残骸而已.


Setup.exe应该用在哪?Windows.old文件夹非有不可吗?PE何时派上用场?细聊Windows系统升级机制
https://lvlele.top/169Windows更新升级介绍/
作者
吕了了
发布于
2026年5月19日
许可协议