无忧启动论坛

 找回密码
 注册
搜索
一次装机 终生领工资最纯净的「微PE装机优盘」UEPON大师作品★IDC大全★服务器租赁、托管★优惠促销★
可防勒索的强大数据备份恢复软件卡瑞飞系统和装机二合一超级U盘广告联系 QQ:184822951 微信:wuyouceo
楼主: slore

[原创] Re:WIN10XPE - 从零开始构建的PE+Admin双登录+MTP支持首发+19H1支持

    [复制链接]
 楼主| 发表于 2018-11-13 22:36:32 | 显示全部楼层
本帖最后由 slore 于 2018-11-13 22:46 编辑

应大家要求以添加StartIsBack为例说明下如何使用WimBuilder2添加一个“补丁”。

===前言===
对PE进行完善无非就是添加/修改文件,补充/修改注册表。
WimBuilder2是一个让此操作更简洁的一个构建工具。

例子中的原生Explorer,输入法等组件的所需列表是从WIN10XPE工程中提取的。
当你知道某个程序所需的文件,和注册表项那么你就可以制作补丁了。
WimBuilder2比WimBuilder增强的是,提供了一个采用html设定补丁选项的UI界面方式,
使得PE做成更灵活。

===正文===
补丁制作正式开始前,首先清楚补丁制作的过程分大体3部分:
1. 补丁选择界面,选项界面
2. 文件,注册表修改
   a. 添加原生系统文件,系统原生注册表(install.wim)
   b. 添加第3方文件,更新自定义注册表项目
3. 配置文件修改(startnet.cmd, pecmd.ini等)
   需要PE启动后执行的初始动作,例如:注册dll,创建快捷方式等
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-13 22:36:59 | 显示全部楼层
本帖最后由 slore 于 2018-11-13 22:52 编辑

===第一章 第一节 补丁选择界面===
StartIsBack是开始菜单,需要外壳依赖,那么我们可以:

  1. +组件
  2.   +外壳
  3.     +开始菜单(如果只使用1个开始菜单工具这层可以不要)
  4.       +StartIsBack
  5.       +ClassicShell
复制代码


WimBuilder2的话,只要目录存在main.html就会显示到补丁选择树上,
相同目录存在zh-CN.js,且其中有patch_name的话,可以自定义补丁的显示名称。
构建时,将调用目录中的main.bat补丁脚本。


  1. Projects
  2.   WIN10XPE
  3.     +01-Components(组件)
  4.       +00-Shell(外壳)
  5.         +StartMenu(开始菜单)
  6.             +main.html
  7.             +zh-CN.js(patch_name="开始菜单")
  8.                +StartIsBack
  9.                   +main.html
复制代码


不需要制作英文版,或者在其他语言系统上制作PE的话,可以直接创建中文目录。

好了,F5刷新下,现在你可以看到StartIsBack的菜单了。
add_patch_to_tree.png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-13 22:37:29 | 显示全部楼层
本帖最后由 slore 于 2018-11-13 23:29 编辑

===第一章 第二节 补丁选项界面===
main.html就是补丁的说明,选项设定界面了。
这个就发挥大家的UI设计水平了,下面我们给StartIsBack设计一个皮肤的选择的选项。
-----------------------------------
◎Windows7 ◉Plain8 ◎Plain10
-----------------------------------


根据 http://www.w3school.com.cn/jsref/dom_obj_radio.asp 我们如下添加3个单选按钮。

Projects\StartIsBack\WIN10XPE\01-Components\00-Shell\StartMenu\StartIsBack\main.html

  1. <p>皮肤</p>
  2. <input type="radio" value="Windows7" /> Windows7
  3. <input type="radio" value="Plain8" checked/> Plain8
  4. <input type="radio" value="Plain10" /> Plain10
复制代码


双击main.html你的浏览器中应该就可以显示它们了,点击试试吧。
main_option.png

你可以发现,3个按钮都能点击,不是互斥的。根据radio标签的语法,
拥有相同的name属性的选项按钮会互斥,所以:
<p>皮肤</p>
<input type="radio" name="skin_group" value="Windows7" /> Windows7
<input type="radio" name="skin_group" value="Plain8" checked/> Plain8
<input type="radio" name="skin_group" value="Plain10" /> Plain10
再试试,是不是可以互斥了。

我们再用组合表单(fieldset标签)包起来:

  1. <fieldset>
  2. <legend>皮肤</legend>
  3. <input type="radio" name="skin_group" value="Windows7" /> Windows7
  4. <input type="radio" name="skin_group" value="Plain8" checked/> Plain8
  5. <input type="radio" name="skin_group" value="Plain10" /> Plain10
  6. </fieldset>
复制代码


是不是更好看了些。
sib_skin.png

下面是重点-如何将选项与补丁脚本(main.bat)关联起来。
WimBuilder2会自动将class属性是opt_item的标签,将其值设置为环境变量opt[标签名]=xxx

所以,最终为:
<fieldset>
<legend>皮肤</legend>
<input type="radio" class="opt_item" name="SIB.skin" value="Windows 7" /> Windows 7
<input type="radio" class="opt_item" name="SIB.skin" value="Plain8" checked/> Plain8
<input type="radio" class="opt_item" name="SIB.skin" value="Plain10" /> Plain10
</fieldset>

main.bat中我们可以使用%opt[SIB.skin]%来使用此选项。

另外,“皮肤”可以在main.html写成Skin,然后通过zh-CN.js定义"Skin":"皮肤"在不同系统下显示对应语言的内容。

PE中常见的是 单选按钮,复选按钮,下拉选择等设定我已经在其他界面实现了,请参照已经有的界面。

可通过Projects\WIN10XPE\config.js来设定,参数的默认值,和默认是否勾选此补丁。

(可以下载后面补丁的最终版本的附件,来查看。)

PS:为了更好的展示效果,其实还可以做3种不同皮肤的预览图,切换不同选项的时候,显示皮肤效果,
main.html中onclick事件通过jquery改下加载图片即可。这个属于html美化范畴,我这里不多说了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-13 22:38:04 | 显示全部楼层
本帖最后由 slore 于 2018-11-13 23:25 编辑

===第二章 第一节A 添加第3方文件===
通过WIN10XPE项目,我们可以看到StartIsBack需要的文件如下:
  1. Win10XPE_2018-10-12\Win10XPE\Projects\Include\x64\AdditionalFiles
  2.   \Program Files\StartIsBack
  3. │  StartIsBack32.dll
  4. │  StartIsBack64.dll
  5. │  StartIsBackCfg.exe
  6. │  startscreen.exe
  7. ├─Orbs
  8. └─Styles
  9.         Plain10.msstyles
  10.         Plain8.msstyles
  11.         Windows 7.msstyles

  12. Win10XPE_2018-10-12\Win10XPE\Projects\Include\x86\AdditionalFiles
  13.   \Program Files\StartIsBack
  14. │  StartIsBack32.dll
  15. │  StartIsBackCfg.exe
  16. │  startscreen.exe
  17. ├─Orbs
  18. └─Styles
  19.         Plain10.msstyles
  20.         Plain8.msstyles
  21.         Windows 7.msstyles
复制代码


WIN10XPE工程來自ChrisR http://theoven.org/index.php?topic=2421.0
可以从这里 http://win10se.cwcodes.net/Compressed/index.php 下载

把上面文件放到
Projects\StartIsBack\WIN10XPE\01-Components\00-Shell\StartMenu\StartIsBack\X_x64
Projects\StartIsBack\WIN10XPE\01-Components\00-Shell\StartMenu\StartIsBack\X_x86
然后,根据PE的构架是32位还是64位,复制对应的文件即可。

WimBuilder2自动将winre.wim/boot.wim挂载到mounted目录,且映射到X:驱动器
所以  xcopy /E /Y X_x64\*.* X:\  就行了。
通过BeyondCompare比较,发现x64和x86公用StartIsBack64.dll以外的所有文件
(没有WOW64支持的话,x64下无法运行StartIsBackCfg.exe设置),
将X_x64版本的所有文件放到X目录,那么我们可以如下书写main.bat:

  1. rem 复制所有文件,如果是x86平台,删除StartIsBack64.dll
  2. xcopy /E /Y X\*.* X:\
  3. if not "%WB_PE_ARCH%"=="x64" del /f "X:\Program Files\StartIsBack\StartIsBack64.dll"
复制代码


是不是很简单?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-13 22:38:25 | 显示全部楼层
本帖最后由 slore 于 2018-11-13 23:08 编辑

===第二章 第一节B 添加第3方注册表项目===
WimBuilder2启动后,将自动将wim的注册表挂载到:
  1. HKLM\Tmp_Default
  2. HKLM\Tmp_Software
  3. HKLM\Tmp_SYSTEM
  4. HKLM\Tmp_SAM
  5. HKLM\Tmp_SECURITY
复制代码


所以,如果想修改PE的注册表,直接通过reg命令即可。
例如使用暗黑主题的命令为:
reg add HKLM\Tmp_Default\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize /v AppsUseLightTheme /t REG_DWORD /d 0 /f

如果需要导入的注册表内容特别多,比如StartIsBack的,可以使用reg文件,
注意使用Tmp_Software之类的路径。
WIN10XPE工程中的
  • SIB_RegDefault.txt
  • SIBx64_RegSoftware.txt
  • SIBx86_RegSoftware.txt

直接就是:
  1. Windows Registry Editor Version 5.00

  2. [HKEY_LOCAL_MACHINE\Tmp_Default\Software\StartIsBack]
  3. "CurrentVersion"="2.6.2"
  4. "WelcomeShown"=dword:00000002
  5. "UpdateDate"="23/08/2017"
  6. "CustomColors"="ColorA=FFFFFFFF"
  7. "AutoUpdates"=dword:00000000
  8. ...
复制代码


这种格式,所以直接拿来用reg import或者regedit /s命令导入即可。
另外,WIN10XPE的Core.Script中还有部分设定,我们通过reg add来修改,
当然,别忘了我们的“皮肤”设定。

所以最终main.bat为:

  1. rem 复制所有文件(含开始菜单头像user-200.png),如果是x86平台,删除StartIsBack64.dll
  2. xcopy /E /Y X\*.* X:\
  3. if not "%WB_PE_ARCH%"=="x64" del /f "X:\Program Files\StartIsBack\StartIsBack64.dll"

  4. rem 导入注册表
  5. reg import "%~dp0SIB_RegDefault.reg"
  6. reg import "%~dp0SIB%WB_PE_ARCH%_RegSoftware.reg"

  7. reg add HKLM\Tmp_Default\Software\StartIsBack /v AlterStyle /d "X:\Program Files\StartIsBack\Styles\%opt[SIB.skin]%.msstyles" /f
  8. reg add HKLM\Tmp_Default\Software\StartIsBack /v TaskbarStyle /d "X:\Program Files\StartIsBack\Styles\%opt[SIB.skin]%.msstyles" /f

  9. rem // StartIsBack Display as flyout menu (Windows XP style) value 0/1
  10. reg add HKLM\Tmp_Default\Software\StartIsBack /v AllProgramsFlyout /t REG_DWORD /d 0 /f
复制代码


其实SIBx64_RegSoftware.txt vs SIBx86_RegSoftware.txt,只有6处
StartIsBack64.dll和StartIsBack32.dll文件名不同的,可以导入其中一份,
然后用reg add命令单独修改。不过就165行,压缩后2KB,没必要整合,
当然如果对StartIsBack进行不同的设定,不想32位,64位的2边都修改,可以整合。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-13 22:38:47 | 显示全部楼层
===第二章 第二节A 添加原生系统文件===
StartIsBack本身并没有依赖,这里简单说下(请参照explorer, ime的main.bat)。

WimBuilder2提供了一个AddFiles宏命令(lib\macros\AddFiles.cmd, AddFiles.vbs),
可以根据一个main.bat中的文件列表进行从install.wim提取文件。
格式:
call AddFiles %0 :end_files
goto :end_files

;install.wim中的文件/文件夹路径列表,例如
\windows\explorer.exe
\Windows\System32\notepad.exe
\windows\IME
:end_files

同时,WimBuilder2的AddFiles针对提取install.wim文件做了些特别处理,使得文件列表变得简洁。
a. @前导符 + 路径: 后续文件可省略文件路径
b. +mui: 提取文件的同时,提取\zh-CN\*.mui之类的对应的mui文件
c. +ver > xxxxx: 后续文件仅在指定的版本条件下才提取
d. 以上内容可组合
e. @-: 取消文件路径
f. -mui: 取消mui文件提取
g. +ver* : 所有版本都提取后续文件(移除版本判断)
h. 文件以\开头,将无视@指定的路径(避免因为个别文件而反复设置@路径)
i.多个文件名以","分割可以写到一行,文件关系更紧凑


以磁盘管理组件为例,参照WIN10XPE的Explorer_AddFiles.txt,内容如下:

  1. ; Microsoft Managment Control. Disk Management
  2. \windows\system32\diskmgmt.msc
  3. \Windows\System32\dmdlgs.dll
  4. \Windows\System32\dmdskmgr.dll
  5. \Windows\System32\dmdskres.dll
  6. \Windows\System32\dmdskres2.dll
  7. \Windows\System32\dmintf.dll
  8. \Windows\System32\dmocx.dll
  9. \Windows\System32\dmutil.dll
  10. \Windows\System32\dmvdsitf.dll
  11. \Windows\System32\dmview.ocx
  12. \Windows\System32\hhsetup.dll
  13. \Windows\System32\??-??\diskmgmt.msc
  14. \Windows\System32\??-??\dmdskres.dll.mui
  15. \Windows\System32\??-??\dmdskres2.dll.mui
  16. \Windows\System32\??-??\dmocx.dll.mui
  17. \Windows\System32\??-??\dmutil.dll.mui
复制代码


所以,MMC\diskMgr.bat

  1. call AddFiles %0 :end_files
  2. goto :end_files
  3. @\windows\system32\
  4. +mui
  5. ;Disk Management
  6. diskmgmt.msc
  7. dmdlgs.dll,dmdskmgr.dll,dmdskres.dll,dmdskres2.dll,dmintf.dll
  8. dmocx.dll,dmutil.dll,dmvdsitf.dll,dmview.ocx,hhsetup.dll
  9. :end_files
复制代码


为了更容易理解,我从WIN10XPE的
Accessibility.Script
Accessibility_AddFiles.txt
移植了,辅助工具(轻松访问,放大镜,屏幕键盘,讲述人)。
这个组件,只要补充install.wim的文件即可。

见最终附件的
WINXPE\01-Components\zz-Accessories\Accessibility\main.bat
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-13 22:39:05 | 显示全部楼层
本帖最后由 slore 于 2018-11-13 23:09 编辑

===第二章 第二节B 添加原生注册表项目===
WimBuilder2启动后,将自动将install.wim的注册表挂载到:
  1. HKLM\Src_Default
  2. HKLM\Src_Software
  3. HKLM\Src_SYSTEM
复制代码

...

可以通过reg命令查询/修改其内容,不过对于PE通常只是复制其内容。
reg copy /?
为了方便,WimBuilder2提供了一个RegCopy宏(lib\macros\RegCopy.cmd),可在main.bat中如下使用:
  1. call RegCopy HKLM\Software\Classes\CLSID
  2. call RegCopy HKLM\Software\Classes\Interface
  3. call RegCopy HKLM\Software\Classes\TypeLib
复制代码


是不是很方便。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-13 22:39:40 | 显示全部楼层
本帖最后由 slore 于 2018-11-13 23:09 编辑

===第三章 配置文件修改===
StartIsBack本身不需要,辅助工具除了创建快捷方式外也不需要,
本章先空下。回头补充pecmd.exe了再写。

就是修改startnet.cmd,或者pecmd.ini文件,批处理怎么处理文本,
就可以怎么用,不过不方便而已。WimBuilder2带了一个OpenTextFile(打开文件)的宏,
大体上可以这样用:
  1. call 打开文件 X:\Windows\System32\startnet.cmd %0 :end_startnet_edit
  2. goto :end_startnet_edit
  3. 文本.将("wpeinit").替换为("echo startup...\r\nwpeinit");
  4. 文本.在("explorer.exe").前插入("echo start shell...");
  5. 文本.替换("rem call ime_cmd.cmd", "call ime_cmd.cmd");
  6. :end_startnet_edit
复制代码


lib\macros\下面自己可以添加喜欢的脚本供批处理调用,或者bin下面添加命令,可以直接使用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-13 23:21:11 | 显示全部楼层
本帖最后由 slore 于 2018-11-13 23:27 编辑

说明比较多,但实际main.bat不过10来行,请直接看最终补丁吧。在附件的如下位置:
StartIsBack(2MB)-> D:\Dev\WimBuilder2\Projects\WIN10XPE\01-Components\00-Shell\za-StartMenu\StartIsBack
辅助工具(1.5KB)->    D:\Dev\WimBuilder2\Projects\WIN10XPE\01-Components\za-Accessories\Accessibility

因为补丁还算小,免得大家再复制整合到工程中,所以提供包含了完整工程 原WIN10XPE+StartIsBack+辅助工具 附件(1.9MB)。

WIN10XPE.zip (1.93 MB, 下载次数: 205)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-13 23:31:05 | 显示全部楼层
把这页占满吧。

点评

支持值得点赞 批处理加句自动退出  详情 回复 发表于 2018-11-14 06:15
回复 支持 反对

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2019-2-23 08:41

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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