跳转至主要内容

晴雨技术笔记

自制 Windows PE(二):为 PE 添加桌面

杏川铭心 杏川铭心
发表于 2025年7月11日

上次我们介绍了基础的 Windows PE 制作,也介绍了一般的自定义流程。不过这样做出来的 PE 界面那是一个非常简陋,而且功能也不怎么多,今天我们就来解决这几个问题。

(是的,我依然没有好的封面图用了)

添加功能包

这个操作依然还是在官方支持的操作里面的,核心就是在挂载映像之后用 dism 添加 .cab 格式的功能包。

可用的包都在 Windows ADK 安装目录下的 Assessment and Deployment Kit\Windows Preinstallation Environment 文件夹里。里面有四个子文件夹,每个子文件夹对应一种架构。

点开其中一个(例如我们要使用的 amd64 架构),可以看到一个 WinPE_OCs 文件夹,里面就放着我们可以安装的包。

可用的 Windows PE 可选功能。

那一大堆文件夹里面放着相对应的语言支持包,剩下的就是各种功能包。具体的介绍可以看微软官方给出的文档

添加的语法也很简单,首先还是挂载映像(忘记的请参考上一篇文章),然后输入:

dism /Add-Package /Image:C:\WinPE\mount /PackagePath:<要安装的包>

还是一样,如果你的挂载路径跟我不一样,请把 /Image 参数后面的路径改掉。

有一些包会有依赖关系,这种情况需要先安装依赖的那个包,例如 WinPE-PowerShell 包必须在 WinPE-Scripting 包之后安装。

这一块没什么好说的,毕竟是官方的东西,咱也玩不出什么花头来。

用 PECMD 替代 winpeshl

PECMD(全名 Windows PE Commander)是一款功能非常强大的实用工具,目前你在网上能下到的 PE 里面几乎都有这个东西。

但是有一点很遗憾,PECMD 的官网是一个网易博客的地址,目前已经打不开了…

目前就这个网站看着还靠谱一点:PECMD 技术社区,毕竟是个论坛,肯定比什么 XX 软件园要好得多。

注意 PECMD 主程序 Windows Defender 100% 报毒,是误报,而且很难选择忽略,因此建议下载一个火绒把 Windows Defender 挤掉。

下载好之后,把整个程序都拷进 \Windows\System32\ 文件夹里。

接下来需要替换系统启动时执行的程序为 PECMD 而不是 winpeshl。

首先打开注册表编辑器,选择文件>加载配置单元。

打开 \Windows\System32\config\SYSTEM 这个文件,名字随意取,比如说 111。

然后找到 Setup,编辑 CmdLine 的值为:

PECMD.exe MAIN X:\Windows\System32\PECMD.INI

如下图:

使用 PECMD 接管 WinPE 启动。

然后选择文件>卸载配置单元。如果无法选中,则需要先选中刚刚我们加载时创建的那个项(在这张图里是“111”)再选择。

接下来编写 PECMD.INI 文件,位置就放在 \Windows\System32\ 下面。

现在我们还没有添加什么有用的东西,因此写一个最为简单的配置:

INIT U
DISP
EXEC X:\Windows\System32\cmd.exe

然后卸载映像,创建 ISO,启动时如果看到命令提示符则代表一起正常。

添加图形界面

相信这个是很多希望使用 WinPE 维护的小伙伴们的刚需,没有图形界面,只能拿 notepad 的保存界面凑合着用,想想就难受……

目前向 Windows PE 添加图形界面有两条路,一条是直接添加原生的 explorer.exe,还有一条是采用第三方的替代品。由于官方的 explorer.exe 依赖项较多,且在 PE 下依赖诸如 StartIsBack 这样的程序显示开始菜单,难度较大。(我在尝试的时候蓝屏了。嗯,对,蓝屏了。)

所以我们就当第三方程序比较好用好了,不要觉得是我水平太菜介绍不了原生 explorer()

第三方程序可选择的内容就多了,基本上,只要带有图形界面的有点文件管理功能的程序都可以拿来用。不过如果是想添加桌面的话,那么选择就很少了。

经过我实际测试下来,bsexplorer 由于年久失修,已经不能在我们这次采用的 PE 版本下运行。这里我们选用 WinXShell

把 WinXShell 程序本体放置在一个你记得住的位置,例如 \Program Files\WinXShell。

我把 x64 版本的程序复制了一份,改名成 WinXShell.exe,这样方便记忆和输入,如下图:

WinXShell 目录结构。

接下来我们需要让 WinXShell 在开机时自动启动成为外壳程序,用来显示我们的桌面。

方法也很简单,不过下面的方法假设你已经用 PECMD 接管了系统,如果没有的话,请参考上面的内容,或者也可以尝试使用 winpeshl.ini 与 startnet.cmd。

把 PECMD.INI 改成下面的内容:

INIT U
SHOW -check -1:-1
RECY *:\,0
NUMK 0
ENVI USERPROFILE=X:\Users\Default
DISP
SHEL X:\Program Files\WinXShell\WinXShell.exe

其中 SHEL 后面就是 WinXShell 所在位置。这个命令和 EXEC 基本是一样的,都可以打开程序,不过 SHEL 启动的程序会在被关闭后由 PECMD 重新启动。

ENVI 是用来设置环境变量的,虽然这个命令在我这里似乎没有生效,很奇怪。

RECY 用来设置回收站大小,这里是直接把所有盘符的回收站大小设置成 0,也就是彻底关闭回收站,删除文件的时候直接删除。

DISP 这一行可以使 PE 的分辨率变成原生分辨率/最大分辨率。

这一切都做好之后,还需要修改两个注册表值。

还是一样,加载配置单元,首先打开的是 SOFTWARE 文件,找到 Microsoft\Windows\CurrentVersion\Policies\System,把 EnableCursorSuppression 改成 0。

然后打开 DEFAULT 文件,找到 Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced,正常情况下应该是没有最后那两个项的,请自行创建。创建完之后在 Advanced 里面新建两个 DWORD,一个是 Hidden,设置为 1,显示隐藏文件,另一个是 HideFileExt,设置为 0,显示文件扩展名。

干完之后卸载配置单元,然后卸载映像,重新生成 ISO。

这一次启动,应该就能看见桌面了。

WinXShell 在 WinPE 下显示桌面。

添加应用

基本的应用添加很简单,只需要把应用拷进挂载的映像里面然后提交就行了,当然,前提是你用的是便携版(也就是所谓“绿色版”)的软件,不需要安装的那种,否则容易出现问题。

不过这样一来,我们就依然需要使用命令行来启动应用。

那我要桌面干啥?

好在往开始菜单和桌面上添加图标也不难,本质上它们就是一堆快捷方式,我们可以用 PECMD 来创建这些内容,也可以选择把快捷方式固化在映像里面。不过要注意的是,如果选择固化快捷方式,那么设置路径的时候需要使用环境变量(例如 %SystemDrive%),而不能直接指定盘符。因为 WinPE 下的系统盘是 X:\,在普通 Windows 下会因为找不到路径而不给你创建。

用 PECMD 则需要使用 LINK 命令。

不过首先,我们需要修改默认用户文件夹所在的位置,PE 下默认在 X:\Windows\System32\config\systemprofile 这里,但是这个位置会有一些副作用,比如说默认不包含 Desktop 文件夹、不显示此电脑图标等等问题。

我们需要先加载 SOFTWARE 这个配置单元,在 \Windows\System32\config\ 这个文件夹下,然后修改 Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-18 下面的几个值(如果没有就创建):

  • Flags 修改为 DWORD 值 c
  • ProfileImagePath 修改为字符串值 X:\Users\Default
  • RefCount 修改为 DWORD 值 1
  • Sid 修改为二进制值 01 01 00 00 00 00 00 05 12 00 00 00
  • State 修改为 DWORD 值 0

接下来就可以开始创建快捷方式了,我们这里选取 PECMD 的 LINK 命令,语法为:

LINK [!]<快捷方式路径>,<目标路径>,[运行参数],[图标路径[#图标索引]],[目标备注],[起始位置]

其中 ! 代表启动应用时是最小化的状态。剩下的几个参数,跟 Windows 下的那些快捷方式配置是一样的,这里不再过多介绍。

比如我们可以添加:

LINK X:\Users\Default\Desktop\记事本,X:\Windows\notepad.exe
LINK X:\ProgramData\Microsoft\Windows\Start Menu\Programs\记事本,X:\Windows\notepad.exe

其中第一行是往桌面上添加图标,第二行是往开始菜单里面添加。

这样启动 PE 后,就可以在桌面和开始菜单里面看到记事本。另外需要注意,我们这个 PE 的记事本就是没有图标的,虽然很奇怪,但是也能理解,如果你非常想要一个图标的话,可以从你当前系统拷一个记事本进去,最好是当成图标指定,防止出现问题。

把所有你要的软件图标都添加完后,最终的效果类似这样:

开始菜单图标。桌面图标。

(左:开始菜单 右:桌面)

是不是有感觉了?

总结

这一次我们成功的使用 PECMD 接管了 PE 的启动进程,同时向我们的 PE 添加了一个简单的桌面。

下一次将介绍如何在 WinPE 中实现基本的网络支持。

杏川铭心
杏川铭心

名字越改越尬,但是网站一点没动🤪 曾用名Frank419(现在也是我在很多地方的用户名),网站站长。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注