从ADK的WinPE自己手动构建自己的PE

2022/1/11 23:09:01

本文主要是介绍从ADK的WinPE自己手动构建自己的PE,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、背景

一直以来,我都是使用微软官方的PE系统来安装操作系统,但是官方的PE系统只有黑乎乎的命令行,每次安装系统都需要使用notepad查看一下镜像所在的盘的盘符,挺麻烦的,于是,我就想到给PE加上一个explorer,从而方便查看资源。

为什么我不使用别人做好的PE?

首先,网络的上的别人制作的PE,无法保证安全性,即使制作的人可以保证不加入任何第三方的文件,但是他使用的制作工具可能也会写入一些文件(毕竟有些人用破解版工具)。安全性,这是不使用别人的制作好的PE的重要原因,毕竟这是用于日常生产中的基础工具,系统的安装和维护都依靠他,要是它有问题,那整个公司的系统都会有问题了。这也是我一直使用微软官方的PE的原因。

第二,PE作为一个基础工具,需要保证足够的兼容性,网络一些制作的PE,各种花里胡哨的工具,连浏览器和网络都给整上了,这就势必提高PE对硬件的要求(PE是完全加载到内存里的),属实没必要。我对PE的要求就是需要它足够小,又具备一些基础的工具,这些工具能够满足我日常安装系统、备份系统、还原系统的需求,那就足够了。

第三,微软官方的PE已经具备了dism,diskpart,这两个工具就能够完全满足日常安装和备份操作系统的需求了。但是对于ISO镜像处理和资源查看还不是很方便,于是我准备加入explorer和UltraISO以及加入oscdimg命令,以方便查看系统资源,查看ISO镜像,生成ISO镜像,刻录ISO镜像。网络的的一些其他人制作的PE,不少都没有oscdimg这个命令行工具。

二、PE的原理

PE的原理很简单,其基本原理就是通过在内存中构建一个虚拟盘符,将PE系统全部加载到该盘符上,然后运行PE系统。这也就是PE系统中安装的软件,下次启动全部消失的原因的,因为操作的都是这个虚拟盘符,内存掉电,信息消失。正是因为如此,PE在长久的使用过程中能够保持稳定性和纯净,从而能够作为一个基础安装环境。

ps:网吧的机器除了服务器之外的那些机器,所谓无盘系统,其实就是通过网络将系统完全加载到内存中,而PE则是通过U盘或者光盘加载到内存中,所以这两者在重启之后,安装的软件都消失了。

三、准备工作

1、下载安装ADK

2、安装PE

以上两步查看这里的博文:

使用微软官方的Winpe系统安装操作系统(包括下载Winpe、制作U盘启动工具、安装操作系统)_lengye7的博客-CSDN博客

3、查看自己的PE版本,然后下载对应的操作系统镜像(explorer文件和注册表就从这里提取),保证文件版本的对应性,防止出现一些莫名其妙的问题。

查看自己的PE版本:版本号10.017763.1 这个版本号对应于win1809 10月份更新的版本。(这里两种选择,自己订阅MSDN,然后去微软官方下一年6000多RMB;还可以去MSDN Itellyou去下载,目前来说他应该是国内比较安全的镜像了,都已经很多年了。或者可以使用更高版本的镜像也可以试试。如果本来就是开公司的,公司还非常大,或者是专业装机的,可以买6000多RMB一年的订阅可以获得所有的windows镜像,可以获得单独的补丁包,可选功能包,然后手动打补丁和添加功能,每个月还有10多个激活码可以足够日常装机激活使用(但是这个可不是正版授权啊)。

 4、windwos的系统软件的运行环境

windows的系统软件的运行往往依赖于三部分:完整的运行文件,包含exe与各种dll,存放在正确的路径;正确的注册表信息;正确的环境变量。

那么我们接下来添加explorer其实就是包含两部分:exe与dll和注册表。

而增加oscdimg也包含两部分:exe与dll和正确的path变量。

5、下载并安装RegistryWorkshop

直接去官方下Home | www.torchsoft.com  ,后面RegistryWorkshop直接简称RW。

这个工具是用于编辑注册表用的,如果没有它,编辑起来非常麻烦。

6、提取原版的PE镜像

1)、安装好ADK和PE相关的东西之后,见上面1和2.

从开始菜单进入部署和映像环境,获得一个命令行窗口。

输入命令:copype amd64  D:\amd64        #注意D盘下不能有amd64这个文件夹

这样就将64位PE的文件都拷贝到了D:\amd64这个文件夹。

ps:使用64位PE的原因是windows11以后将不能使用32位的PE部署,再加上现在的机器都是64位,也没有必要制作32位PE了,如果哪天遇到一台32位的机器,制作一个命令行的32位PE就行了。

2)、挂载PE的boot.wim(这个就是PE的核心文件,添加文件也是往这里添加)

输入命令:dism /mount-image /imagefile:D:\amd64\media\sources\boot.wim /index:1 /mountdir:D:\Winpe64

#注意,Winpe64这个目录提前建立好,并且这个目录必须是空的。

挂载之后:

3)、向该PE中添加一些必要的包

#先查看有哪些包

 Dism /Get-Packages /Image:D:\Winpe64

#添加一些包

把以下命令写成批处理脚本:

脚本已经写好了,还没贴上来。

包添加完了之后,继续执行:

 Dism /Get-Packages /Image:D:\Winpe64

查看是否添加成功:已经添加成功。

 #卸载镜像并保存更改

在执行命令之前,保存一下老的boot.wim

输入命令:

Dism  /Unmoun-Image /MountDir:D\Winpe64 /Commit

执行完了之后会在D盘生成一个boot.wim。下面可以对比新旧两个boot.wim,新的明显大了不少。 

#使用MakeWinpeMedia命令生成一个ISO文件用于虚拟光驱测试PE

ps:MakeWinpeMedia内部也是使用oscdimg来生成ISO文件的,所以我没有直接用oscdimg。默认情况下,该命令脚本生成的ISO和UFD都是支持BIOS传统与UEFI双启动的,这个就很好。

输入命令:

MakeWinpeMedia  /ISO  D:\amd64  D:\PurePeBase.iso

将获得一个PurePeBase.iso文件,如无意外,它可以正常启动进入PE。

至此,所有准备工作结束。

同时具备了如下东西:

  • PurePeBase镜像,往后的文件添加以此为基础。
  • Win10版本1809十月份更新镜像,explorer文件以及dll和注册表从这里提取。
  • ADK工具中包含了oscdimg命令工具,该命令以及相关文件从这里提取。
  • RW注册表编辑工具

四、开始真正添加所需要的工具

先将PurePeBase挂载起来,还是D:Winpe64这个目录挂载。

1、先添加oscdimg工具

在ADK工具中找到oscdimg工具,位于:

 前面还有一大串\Assessment and Deployment Kit\Deployment Tools

目录下,这个目录直接从部署和映像工具环境就可以进入,下面有四个目录amd64、arm、x86、arm64,这四个目录下都有oscdimg,这里使用amd64目录下的,因为该目录下的工具都是64位的。

直接从部署和映像工具环境进入命令行

输入命令:

md D:\Winpe64\Windows\Oscdimg

copy .\amd64\oscdimg D:\Winpe64\Windows\

然后保存更改,打包成镜像测试。

经过测试,发现Oscdimg目录没有加入到path环境变量中,导致无法在任何地方使用,所以需要修改path环境变量。

在加载目录下:windows\system32\config  这个位置是存放PE注册表文件的地方。

使用regedit工具编辑以下注册表键:

SYSTEM\ControlSet001\Control\Session Manager\Environment]

找到path,加入;%SystemRoot%\Oscdimg 

然后保存修改,重新制作ISO测试成功。

 regedit编辑注册表文件的方法:在PE里如何修改系统注册表?U盘PE下修改本机注册表方法 -Win7系统之家

后续自己写一个修改办法吧,这个还专门特指PE,有点误导。

可以使用reg命令修改注册表。

至此oscdimg成功添加。

得到一个PeOscdimg2.0.iso文件。

以下所有的步骤都在PeOscdimg2.0.iso的基础上进行。

2、下面添加原生的explorer

在PeOscdimg2.0.iso文件基础上。

explorer添加起来有很多dll需要添加,但是由于有很多前人已经走过这一条路了,于是总结了一份文件清单,所以就按照前人的文件列表复制一份对应的文件再说。同时,也可以引入一些工具用来查看explorer的所需要的dll,然后依次对比PE中的文件,缺什么就补什么。

还有一种偷懒的办法,就是对比别人做好的PE,只添加一个explorer.exe进去,别人需要添加哪些文件,我也就添加哪些文件。实际上,我就是这么做的。

注册表是用完整software注册表,删除run as=Interactive User。

关于explorer我已经全部脚本化了。

我只需要将explorer所需要添加的文件写入到脚本的AddFiles.txt中即可。

3、桌面快捷方式的添加(不宜添加过多)

写一个脚本,在explorer.exe启动之后,然后将相应的快捷方式复制到X:\Windows\System32\Config\systemprofile\desktop文件夹中。

这个脚本开机就启动,不断检测exeplorer.exe进程,当这个进程启动之后,就把对应的快捷方式复制到对应的文件夹。但是ADK中不包含tasklist这个程序,所以就必须提前把它放置到ADK中。

可以预先把快捷方式放置在某一个文件夹中。

桌面快捷方式的获得,我的办法是:先将该程序添加到PE中,然后启动PE,进入到该程序的目录中,右键创建一个快捷方式,然后将该快捷方式复制到别的U盘中,后面我再从U盘添加到PE中。

由于我已经脚本化了,所以我只需要将U盘中的快捷方式放置到脚本对应的目录中即可。

4、由于winpeshl.ini中指定的开机启动项只能按照从上而下一次运行,并且上一个应用运行结束之后,才会继续运行下一个应用,也就是说,如果启动了explorer.exe,就无法再继续运行其他的程序了,所以就无法做到开机自动的运行3中的快捷方式修复脚本了。

目前,我想到一个办法,我在一开始的AppPath中运行cmd.exe /C startnet.cmd脚本,然后在startnet.cmd脚本中运行一个start cmd.exe /C desktop.cmd(这个脚本就是3中的那个脚本),从而就能够开机运行3中的脚本了。

这个我已经脚本化了,后续如果有新的需只需要改动脚本即可。

1234均以实现,完全满足日常需求,可以作为一个基础PE,然后在这个PE中添加程序、驱动等。

5、分辨率,这个我倾向于自己写一个win32api的静态编译的程序,从而能够获得非常好的兼容性与可移植性,目前这个尚未实现。关键性API,GetSystemMetrics(获取屏幕分辨率,这是操作系统设置的那个分辨率),GetDeviceCaps(获取屏幕分辨率,这是显示器的物理分辨率),ChangeDisplaySettings(改变屏幕的分辨率设置)。

突然得到一个rundll32.exe的命令,我在想,能否使用该命令来调用这3个函数,从而实现一个cmd版本的分辨率设置程序呢?

6、添加一些基本的工具

winrar和ultra ISO

在添加Ultra ISO的时候,遇到The app can't run on your PC的问题,我估计是因为需要运行驱动,这个问题似乎比较难受,我就转向尝试power ISO,然后就成功了。

PowerISO安装好之后,直接将PrograFiles下的一个整个目录PowerISO打包进PE即可。

PowerISO解决试用弹出问题,它是用注册表检测是否注册,购买注册码注册之后,找到HLKU下面的PowerISO子项,复制该子项的user键值。

然后挂载PE的DEFAULT文件为pe-default,在pe-default\software子项下创建一个新的子项PowerISO,然后给PowerISO新建一个二进制的键值USER,将刚才复制的user键值粘贴到这个键值之下,卸载pe-default,打包就可以了。

启动PE就应该看不到PowerISO的注册问题了。

WinRAR安装好之后,直接将ProgramFiles下的一整个WinRAR目录打包进PE即可。由于WinRAR可以无限试用,就不用解决注册问题了。

这两个我已经脚本化了,脚本中包含的版本就是最新的(2022年1月11日安装)版本。

7、网络添加与文件传输

暂时不加

8、自己写一个界面以调用diakpart和dism来分区和安装文件

暂时不写

其中2346已经脚本化了,脚本执行完成之后,我只需要使用新的boot.wim替换D:\amd64\media\sources\boot.wim,然后运行MakeWinPEMedia命令打包成一个新的iso文件即可。

经过多次反复的测试调试,最终我得到一个ZeroPe30.0.iso文件,这就是我经过30个版本的迭代得到的我需要的PE了。

由于强迫症,我又消除了桌面的右键菜单的屏幕分辨率与个性化这两个无用的选项。此步骤也已经脚本化。

记录一下制作PE中所踩中的坑:

https://blog.csdn.net/lengye7/article/details/122435020

其他链接:

一键制作脚本:https://pan.baidu.com/s/1rfmPlht62NlxwvIHGsJXYA  提取码:1u75

ADK下载页面:Download and install the Windows ADK | Microsoft Docs

成品下载链接:链接:https://pan.baidu.com/s/1CaDnE40_Ce0ovAdSye5F_g  提取码:ujvl



这篇关于从ADK的WinPE自己手动构建自己的PE的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程