无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 29185|回复: 79
打印 上一主题 下一主题

[原创] (2016-07-06 更新) 轻量WIM更新框架-WIMBuilder(可一键创建PE,精简系统)

    [复制链接]
跳转到指定楼层
1#
发表于 2016-6-21 23:28:34 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 slore 于 2016-8-30 21:44 编辑

What's me?
基于BAT批处理文件和VBS脚本的利用系统Dism命令对WIM文件进行更新框架。
可一键生成自定义PE, 或者精简,修改Windows 7以上系统安装镜像(install.wim)

此框架特点:
  • 小,非常小,处理脚本压缩后不到15KB。
  • 利用系统原生支持BAT,VBS脚本及系统自带命令,支持主流Windows平台及对应PE制作。
    • 构建  平台:Windows 7, Windows 8, Windows 8.1, Windows 10 (x86, x64)
    • 构建PE版本:WinPE 3.x, WinPE 4.0, WinPE 5.0, WinPE 5.1, Windows 10 PE (x86, x64)
    • 构建Windows版本:Windows 7, Windows 8, Windows 8.1, Windows 10 (x86, x64)
  • 脚本完全自由。不进行任何形式加密,任何人可以复制,修改,再发布,无任何限制。
  • 原创i18n脚本组件, 支持多国语言。
  • 只需放置文件,定义文件列表,不需要任何编程技巧即可方便构建属于自己的PE。
  • 每个修正Patch为独立文件夹,可重复应用,功能添加修改独立清晰,也可发布,减少更新发布体积。
  • 构建工程不管在何人机器,何平台总可以从boot.wim生成完全相同的PE,且修改可逆可追溯。
  • 只用按空格继续即可,快速构建出可启动的个性化PE。(最快1分钟内)
  • 可一键构建属于自己的PE/Windows系统。



使用方法:
STEP.1.准备环境(只需要1次)
a.解压附件到本地磁盘驱动器根目录,得到如下结构(仅列出使用时需要关注的文件或目录)

-PB_Workspace\
  +mnt\
    +build\
      +ISO\
  +Projects\
  +PE_Builder\
    +config.ini

b.将系统ISO的boot目录,bootmgr文件复制到mnt\build\ISO中,创建一个空sources目录。
  (以上为默认启动光盘模板,可根据自己的情况修改)

STEP.2.配置config.ini文件中的参数,来定义所有工程的初始设定(设定可被各工程的config.ini的设定覆盖)。
  *挂载目录(必须)
  *用于复制原版系统文件的install.wim
  *构建PE的基础WIM(boot.wim或者自己/别人做好的wim)
  *挂载映像序号(默认为1)
  *生成路径(必须)
  *是否需要获取文件完全访问权(使用系统boot.wim时需要设置为0, 可能花费2~5分钟)
  *是否需要获取注册表完全访问权
  等

STEP.3. 在Projects目录下创建一个工程目录,里面存放各种Patch(*后续有例子说明)
STEP.4. 双击PE_Builder\PE_Builder.bat,选择构建工程,无异常一路空格即可构建出wim格式PE。
STEP.5. 双击PE_Builder\MakeBootISO.bat,等待数秒钟可以得到自制PE的启动ISO文件。

关于STEP.3可下载附件Mini10PE进行参考。
以下说明下*Patch*的构成。

Patch为一个目录,是某种精简,或者某种功能更新,结构如下:
Patch_Sample\
  +INIT.bat        <- 可缺省,用于应用Patch前,初始自定义脚本(处理生成增删改文件列表,或者别的COPY操作等)
  +KEEP_ITEMS.txt  <- 可缺省,定义某目录需要保留的文件,其余文件将被删除
  +DEL_DIRS.txt    <- 可缺省,定义要删除的目录,例如:Windows\SysWOW64
  +DEL_FILES.txt   <- 可缺省,定义要删除的文件,例如:Windows\System32\app.exe
  +ADD_ITEMS.txt   <- 可缺省,定义需要从install.wim文件复制的文件或文件夹列表
  +X\              <- 可缺省,X文件夹,放置需要复制/更新到PE中的文件,例如:  X\Windows\System32\PExlorer.exe
  +*.reg           <- 可缺省,需要导入到PE系统的注册表文件(注册表不需要修改项目路径为挂载后的PE_SOFT之类, 请保持PE下的注册表项名)
  +LAST.bat        <- 可缺省,用于收尾时需要的额外处理的自定义脚本(上述文件注册表修正以外,其他操作,如:动态创建快捷方式等)

注意1:KEEP_ITEMS.txt 文件第一行是需要保留的文件夹路径,结尾必须带"\",以下是需要保留的子目录或者子文件,目录结尾必须带"\"
注意2:各工程目录下的各Patch目录按字母顺序处理。如果向System32复制了某文件,如果某Patch采用KEEP_ITEMS.txt的形式,可能又被删除掉。
      解决方法是,通过命名改变Patch适用的顺序,例如 A_TEST、B_TEST2,或者0_Patch1、1_Patch2。运用LAST.bat自定义适用顺序,将有顺序关系的Patch放到任意子目录(Package),
      在LAST.bat中书写:
                         call PB_APPLY_PATCH %~dp0Package\PatchB
                         call PB_APPLY_PATCH %~dp0Package\PatchA
      注意Patch名不要设置为X,因为此Package目录实际当一个Patch处理了,只是利用X目录以外的目录不进行任何操作的机制来达到自定义Patch适用顺序的目的的。


附件中的Mini10PE工程,可以从Windows 10的boot.wim构建出73MB的小容量WIN10PE。(几乎只有cmd.exe命令可用,regedit,taskmgr,notepad都无法运行,结果PExlorer.exe可以显示桌面)
由于精简WinSxS目录,System32\CatRoot目录的定义中有版本信息,个人测试时注意修改:"精简System32\KEEP_ITEMS.txt", "精简WinSxS\KEEP_ITEMS.txt"。

2016-07-06 更新:
0706完整版: PB_Workspace0706.zip (560.11 KB, 下载次数: 227)
MaintPE实例工程:
MaintPE.zip (1.11 MB, 下载次数: 294)
精简PATCH包包含字体文件,3MB多无法附件上传,需要的话从下面的百度盘下载。

完整更新,在这里下载。
链接: http://pan.baidu.com/s/1kVwbKOZ 密码: k6ut (2016-08-30 补链接)
(本来差分更新,是希望使用的时候可以看到以前个更新以及避免config.ini文件覆盖,但也因此可能下载顺序不一直导致不是最新版,所以提供此链接,内附Projects工程样例)
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=378646

  • 利用PB_APPLY_PACKAGE.bat应用外部路径的通用补丁时,补丁无法应用问题。

工作目录不正确导致的,添加了2行代码。(pushd "%~1", popd)

2016-07-02 更新:
*请下载最新完整版*
下载后替换PB_Workspace下面的PE_Builder目录即可。

  • 修正KEEP_TIEMS.txt中定义的目录无法保留子目录的问题
  • 修正非中文操作系统上,工序,错误无法高亮显示问题
  • 添加CLEANUP模式(PE_Builder_CLEANUP.bat),强制清理工程WIM挂载,注册表挂载,X盘映射等(当构建出错未做清理时,为了下次构建顺利时使用。)
  • 提交WIM前,清理注册表更新残留LOG文件
  • 通过DISM命令获取构建WIM的基本信息保存至环境变量后续可利用(体系结构,版本号,默认语言)
  • 保留文件,删除文件/夹,复制系统文件可支持使用环境变量
  • 上面的功能配合起来,不同版本,不同体系结构(x86/64),不同语言的镜像,可以利用相同的PATCH定义
  • PE_Builder目录改名为WIM_Builder(内部文件代码不变)


新功能应用实例:
1.基本信息获取
  1. 工序:获取WIM文件信息
  2. PB_PE_ARCH=x64
  3. PB_PE_BUIID=16384
  4. PB_PE_LANG=zh-CN
  5. PB_PE_VER=10.0.10240
复制代码


2.平台通用精简WinSxs的PATCH
如果config.ini中定义PB_PE_WOW64=1时,对WinSxs目录保留amd64,syswow64,x86开头的指定文件,
否则,x64平台只保留amd64开头,x86平台保留x86开头的指定文件。

+精简WinSxs\
    +INIT.bat
    +KEEP_ITEMS.txt
    +LAST.bat

INIT.bat --- 根据体系结构设置匹配前缀
  1. set PE_ARCH_PREFIX=%PB_PE_ARCH%
  2. if "%PB_PE_ARCH%"=="x64" set PE_ARCH_PREFIX=amd64
  3. if "%PB_PE_ARCH%_%PB_PE_WOW64%"=="x64_1" (
  4.   set PE_ARCH_PREFIX=*
  5. )
复制代码


KEEP_ITEMS.txt --- 各系统平台通用的保留文件定义

  1. Windows\WinSxS
  2. %PE_ARCH_PREFIX%_microsoft-windows-servicingstack_*_*_none_*
  3. =Manifests
  4. Manifests\%PE_ARCH_PREFIX%_microsoft.windows.systemcompatible_*_*_none_*.manifest
  5. Manifests\%PE_ARCH_PREFIX%_microsoft.windows.fusion_components_all_*_*_none_*.manifest

  6. ;below "+Manifests" keyword
  7. ;not only the directory and also the Manifests file will be added
  8. +Manifests
  9. %PE_ARCH_PREFIX%_microsoft.windows.common-controls_*_*_none_*
  10. %PE_ARCH_PREFIX%_microsoft.windows.gdiplus.systemcopy_*_*_none_*
  11. %PE_ARCH_PREFIX%_microsoft.windows.gdiplus_*_*_none_*
  12. %PE_ARCH_PREFIX%_microsoft.windows.isolationautomation_*_none_*
  13. %PE_ARCH_PREFIX%_microsoft.windows.i..utomation.proxystub_*_none_*
  14. %PE_ARCH_PREFIX%_microsoft.windows.c..-controls.resources_*_%PB_PE_LANG%_*
复制代码


LAST.bat --- microsoft-windows-servicingstack下只保留drvstore.dll(可省略)
  1. rem just keep drvstore.dll
  2. set MS_SS=
  3. for /f "delims=" %%i in ('dir /b X:\Windows\WinSxS\%PE_ARCH_PREFIX%_microsoft-windows-servicingstack_*_*_none_*') do (
  4.   set MS_SS=%%i
  5. )
  6. if "x%MS_SS%"=="x" goto :EOF

  7. move /Y X:\Windows\WinSxS\%MS_SS%\drvstore.dll X:\Windows\WinSxS\
  8. del /Q X:\Windows\WinSxS\%MS_SS%\*.*
  9. move /Y  X:\Windows\WinSxS\drvstore.dll X:\Windows\WinSxS\%MS_SS%\
  10. set MS_SS=
复制代码


下个小版本要做的功能:
  • 各Project目录下,根据体系结构信息,应用专属PATCH集合(x64/x86/WOW64)
  • ADD_ITEMS.txt中支持"+MUI"关键字,复制dll时,连同对应的多语言文件一起复制


2016-06-23 更新:

下载后替换PB_Workspace下面的PE_Builder目录即可。

  • config\下的注册表文件自动挂载,reg文件自动处理项目名并导入。(任意*.reg文件放入工程目录或者PATCH目录即可,直接支持导入正常系统或者PE系统导出reg格式,不要加工项目名)
  • WinSxS精简的KEEP_ITEMS.txt支持通配符,以方便不同版本,不同位数的PE构建。


注意:支持通配符扩展KEEP_ITEMS.txt中的目录结尾不要加"\";
        第一行只能是Windows\WinSxS或Windows\System32\CatRoot
        子目录前必须用"=子目录"声明子目录路径;
        对于WinSxS目录,增加一个"+Manifests"语句,这行之下的目录保留的同时会保留Manifest中的同名文件。

例如:
KEEP_ITEMS.txt

  1. Windows\WinSxS
  2. =Manifests
  3. Manifests\amd64_microsoft.windows.i..utomation.proxystub_*_none_*.manifest
  4. Manifests\amd64_microsoft.windows.isolationautomation_*_none_*.manifest
  5. Manifests\amd64_microsoft.windows.c..-controls.resources_*_zh-cn_*.manifest
  6. Manifests\amd64_microsoft.windows.c..-controls.resources_*_zh-cn_*.manifest
  7. Manifests\amd64_microsoft.windows.systemcompatible_*_*_none_*.manifest
  8. Manifests\amd64_microsoft.windows.1234_*_*_none_*.manifest  <--- 不存在的话,控制台会有提示“找不到文件”,后续精简动作继续进行
  9. ;below "+Manifests" keyword
  10. ;not only the directory and also the Manifests file will be added
  11. +Manifests
  12. amd64_microsoft.windows.common-controls_*_*_none_*
复制代码


这样同样的精简PATCH设定可以精简全大版本(7,8,8.1,10)和全小版本(10240,16586等)的WinSxS,将amd64改为*即可同时保留amd64,Syswow64,x86的WinSxs文件。(对于支持32位应用的64位PE会方便些)

至此,从文件到注册表的处理已可全部自动完成,本月或者之后应该不会再有功能更新,
有时间了发布工程或者Patch设定。

2016-06-22 小更新:
*请下载最新完整版*
下载后替换PB_Workspace下面的PE_Builder目录即可。

  • 根据ADD_ITEMS.txt文件定义(目录请以"\"结尾)从install.wim复制系统文件
  • 添加PB_SRC_INDEX参数,指定install.wim的映像序号(默认值为1,不设置的时候为1)
  • 添加了一个PE_Builder_STRAIGHT.bat脚本,实现选择构建工程后,途中无按任意键继续的确认交互,一路处理到ISO镜像作成


因为我使用boot.wim的第二卷,不需要修改注册表和从install.wim中获取文件。

截图:

多语言支持


通过Mini10PE工程,构建的73MB PE预览。


相同Mini10PE工程, 删除 精简System32和WinSxs 这2个Patch文件夹,基于Windows 8.1 Boot构建的PE。

附件:

PB_Workspace
*请下载最新完整版*

Mini10PE工程(需要放到Projects下面)
Mini10PE.zip (1.68 MB, 下载次数: 432)

评分

参与人数 12无忧币 +59 收起 理由
xuexiang + 5 很给力!
papago + 5 神马都是浮云
netbrain + 5 赞一个!
zmac2007 + 5
andos + 5 很给力!
was172 + 5 赞一个!
engineerlzk + 4 很给力!建议楼主每次更新时还是附上完整的.
helloman + 5 很给力!
dfswb + 5 楼主,太厉害了!
zfgeng + 5 很给力!
wintoflash + 5
pseudo + 5 很给力!

查看全部评分

2#
 楼主| 发表于 2016-6-22 10:28:40 | 显示全部楼层
2012bzsb 发表于 2016-6-22 10:19
等待不久将来的win10
其实,只要支持WIN10就够了

配置config.ini文件,
set PB_SRC_WIM=D:\win10_10240_x86\install.wim
本来就会自动挂载原版系统WIM,

不过工程处理完了,又自动卸载了,挂载也费时间的,原版WIM不频繁切换的话,
后续会添加一个参数,维持挂载,不频繁卸载,挂载了。

点评

好强大的软件啊!这个一定是我等菜鸟的福音啊!可是资源都挂了,希望楼主从新分享,谢谢  详情 回复 发表于 2016-8-25 20:18
回复

使用道具 举报

3#
 楼主| 发表于 2016-6-22 16:17:21 | 显示全部楼层
xzf680 发表于 2016-6-22 10:31
Good job!      
请问一下,这个可以做8.1PE吗?

特点中所述WinPE 5.0就是win8.1的,将Mini10PE的工程复制一份81PE,删除精简system32和精简winsxs这2个patch目录,双击即可得到如下图所示测试win8.1PE


回复

使用道具 举报

4#
 楼主| 发表于 2016-6-22 16:17:32 | 显示全部楼层
xzf680 发表于 2016-6-22 10:31
Good job!      
请问一下,这个可以做8.1PE吗?

特点中所述WinPE 5.0就是win8.1的,将Mini10PE的工程复制一份81PE,删除精简system32和精简winsxs这2个patch目录,双击即可得到如下图所示测试win8.1PE


点评

很不错的样子,教程做图文并茂更好 !辛苦了支持一下 只是将Mini10PE的工程复制一份81PE,删除精简system32和精简winsxs这2个patch目录,双击即可得到如下图所示测试win8.1PE 有的不理解,能否说详细一点!  详情 回复 发表于 2016-6-23 10:45
回复

使用道具 举报

5#
 楼主| 发表于 2016-6-24 08:48:24 | 显示全部楼层
注册表可自动导入,TODO要做的事情全部完成。
回复

使用道具 举报

6#
 楼主| 发表于 2016-6-24 14:27:32 | 显示全部楼层
2012bzsb 发表于 2016-6-24 11:00
还能精简系统,这个好.希望可以极度精简winsxs ,还能保证INSTALL正常安装.(几十M大小吧)

PE,希望有个或者 ...

你要求太低了,几十Mb,首页的例子精简出来的3MB,压缩后1.5MB的winsxs就可以正常安装系统

回复

使用道具 举报

7#
 楼主| 发表于 2016-6-24 14:27:42 | 显示全部楼层
2012bzsb 发表于 2016-6-24 11:00
还能精简系统,这个好.希望可以极度精简winsxs ,还能保证INSTALL正常安装.(几十M大小吧)

PE,希望有个或者 ...

你要求太低了,几十Mb,首页的例子精简出来的3MB,压缩后1.5MB的winsxs就可以正常安装系统

回复

使用道具 举报

8#
 楼主| 发表于 2016-6-27 12:39:12 | 显示全部楼层
xzf680 发表于 2016-6-27 11:15
我是按楼主说的做的
特点中所述WinPE 5.0就是win8.1的,将Mini10PE的工程复制一份81PE,删除精简system3 ...

手头环境,不能上传附件。如果你是按照这个做的话,因为system32没有精简掉,所以
wallpaperhost还存在需要强杀,Mini10PE的精简掉了,wallpaperhost.exe所以可以见桌面。

确认生成boot.wim里面带了PExlorer.exe的话,
启动的控制台输入:
taskmgr.exe,结束wallpaperhost.exe进程,设置用户环境变量

set USERPROFILE=X:\Users\Default

在启动PExlorer.exe
start PExlorer.exe -winpe


在根目录或者Z_PExlorer目录加一个
DEL_FILES.txt
Windows\System32\wallpaperhost.exe

重新构建就可以了。

点评

好的谢谢,我再试试,如有方便的话请再传一下81PE工程,另个这句: 启动的控制台输入: taskmgr.exe,结束wallpaperhost.exe进程,设置用户环境变量 set USERPROFILE=X:%users\Default 在启动PExlorer.exe s  详情 回复 发表于 2016-6-27 17:03
回复

使用道具 举报

9#
 楼主| 发表于 2016-6-27 17:45:28 | 显示全部楼层
xzf680 发表于 2016-6-27 17:03
好的谢谢,我再试试,如有方便的话请再传一下81PE工程,另个这句:
启动的控制台输入:
taskmgr.exe,结 ...

因为默认boot.wim里面没有taskkill命令,你到弹出来的cmd窗口,输入:taskmgr
启动了任务管理器吧,切换到“进程”界面,找到wallpaperhost.exe进程,右键结束进程,
此时背景应该变成黑色,然后在命令行提示符下:
set USERPROFILE=X:\Users\Default 回车
start PExlorer.exe -winpe 回车

点评

我再测试一下,如果真可以的话,那每次进PE的话都得这样按才能进入不是很麻烦,希望楼主可以做一个81PE工程,上传有问题的话也可以发布在百度网盘上。  详情 回复 发表于 2016-6-27 19:52
回复

使用道具 举报

10#
 楼主| 发表于 2016-7-2 10:24:51 | 显示全部楼层
回复错了,不好意思。
回复

使用道具 举报

11#
 楼主| 发表于 2016-7-2 10:26:06 | 显示全部楼层
2012bzsb 发表于 2016-6-27 18:49
wallpaperhost.exe这个有什么用? 应该默认删除此文件.
没它也不影响桌面背景图片.

wallpaperhost创建了桌面窗口,除了显示桌面壁纸以外,还有个重要功能就是shell刷新,文件变动,驱动器插入啥的。boot.wim启动,没有资源管理器,任务管理器也打不开新版文件对话框,所以可能看不到吧,但是notepad.exe的打开文件对话框可以使用老版的(左边不是目录树,而是固定的几个位置),
你在这个窗口,可以新建,复制文件,改名,删除之类操作,有wallpaperhost.exe的时候会自动刷新,
你要是删除了就得手动F5。
PExlorer.exe对这块也没处理,加了个内存补丁修改shell32.dll的一个字节可以达到效果,但是
具体修改地址,随Windows版本更新总是变化,给我对应版本的shell32.dll,我有方法能定位修改地址,
但是程序自动识别有点麻烦。
回复

使用道具 举报

12#
 楼主| 发表于 2016-7-2 16:14:35 | 显示全部楼层
为了32位和64位,不同语言的WIM文件可以使用相同构建工程定义,小幅更新。
回复

使用道具 举报

13#
 楼主| 发表于 2016-7-28 12:51:09 | 显示全部楼层
ly5360 发表于 2016-7-28 12:29
最近想自己做个pe,看到楼主的神器,下来使用时发现挂在WIM会失败问题,但实际上已经挂在好了,不知道是不 ...

最新版本应该是WIM_Builder目录。

错误原因,估计是以前挂载过改目录,没卸载掉,新运行的是这次挂载失败了,虽然目录还在。

http://pan.baidu.com/s/1jIMzbAu#path=%252FPE%252FMyPE_Workspace
确认下是否是7/6的最新版。

这个版本里面应该有个 PE_Builder_CLEANUP.bat 的,你运行下,选择你的工程,会自动清理
WIM挂载过的。

这个工具默认会挂载,install.wim到 mnt下面的SOURCE目录,boot.wim会挂载到
为工程名的目录。
dism命令
dism /Get-MountedWimInfo
确认下,是否挂载过,有的话用CLEANUP卸载,或者手动卸载试试。

如果还不行,SOURCE目录实际挂载了,但是dism命令提示挂载失败,
删除config.ini的PB_SRC_WIM路径
set PB_SRC_WIM=D:\MyPE\wim-soure\sources\install.wim

set PB_SRC_WIM=

如果是boot.wim不能挂载,尝试把工程目录复制下,改个名字重新挂载到新目录上试试。

建议不要修改WIM_Builder的config.ini,而是在工程目录下用工程的config.ini覆盖默认选项。
回复

使用道具 举报

14#
 楼主| 发表于 2016-7-28 15:48:52 来自手机 | 显示全部楼层
set PE_BASE_INDEX=2,boot.wim的第一卷是winPE要改注册表或者init.bat中使用提示的dism命令
回复

使用道具 举报

15#
 楼主| 发表于 2016-7-28 21:28:20 | 显示全部楼层
kli 发表于 2016-7-28 21:18
度盘密码是多少啊?

以为是无密码分享,自己能直接点开。。。
1楼更新了链接。

点评

kli
谢谢回复,才发现这么有用的帖子,萌新准备尝试自己做个pe  详情 回复 发表于 2016-7-28 21:30
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-7-8 09:12

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表