无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: slore
打印 上一主题 下一主题

[原创] (2022-02-02 更新) Re:WIN10XPE - 从零开始构建的全功能PE

    [复制链接]
51#
发表于 2018-12-27 15:15:52 | 只看该作者
回复

使用道具 举报

50#
发表于 2018-12-25 21:57:43 | 只看该作者
好东西,收藏一个
回复

使用道具 举报

49#
发表于 2018-12-25 21:12:08 | 只看该作者
期待楼主继续完善,万分感谢楼主的分享!
回复

使用道具 举报

48#
发表于 2018-12-20 16:47:17 | 只看该作者
请问WimBuilder2_1204,master,WimBuilder2_with_WIN10XPE
这3个包彼此是什么关系
回复

使用道具 举报

47#
发表于 2018-12-19 20:20:10 来自手机 | 只看该作者
何时出成品

点评

事情太多,暂时没时间处理WIN10XPE工程,我精简的成品就更靠后了。  发表于 2018-12-20 13:55
回复

使用道具 举报

46#
发表于 2018-12-17 19:21:22 | 只看该作者
mark 赞赞赞小白福利啊
回复

使用道具 举报

45#
发表于 2018-12-14 21:51:03 来自手机 | 只看该作者
支持,自己做PE。
回复

使用道具 举报

44#
发表于 2018-12-14 20:08:23 | 只看该作者
非常感谢,楼主辛苦!
回复

使用道具 举报

43#
发表于 2018-12-13 12:25:55 | 只看该作者
何时出成品PE
回复

使用道具 举报

42#
发表于 2018-12-11 20:13:33 | 只看该作者
谢谢分享,收藏备用。

这个有打印功能吗?
回复

使用道具 举报

41#
发表于 2018-12-11 19:46:35 | 只看该作者
谢谢楼主分享
下来看
回复

使用道具 举报

40#
发表于 2018-11-30 02:27:01 | 只看该作者
先收藏一下,谢谢大佬的教程,虽然萌新看不懂
回复

使用道具 举报

39#
发表于 2018-11-27 11:27:59 | 只看该作者
感谢分享,期待早日成熟、完善!下载下来先制作一个试试。
回复

使用道具 举报

38#
发表于 2018-11-26 17:16:46 | 只看该作者
真的很不错  制作工具
回复

使用道具 举报

37#
发表于 2018-11-26 17:16:43 | 只看该作者
真的很不错  制作工具
回复

使用道具 举报

36#
发表于 2018-11-22 19:55:32 | 只看该作者
真是特别好的作品,收藏
回复

使用道具 举报

35#
发表于 2018-11-20 23:13:12 | 只看该作者
大师,加一运行的log记录文件,好查看运行记录
回复

使用道具 举报

34#
发表于 2018-11-14 19:16:22 | 只看该作者
谢谢分享软件
回复

使用道具 举报

33#
发表于 2018-11-14 18:51:09 | 只看该作者
感觉很不错啊,谢谢楼主了
回复

使用道具 举报

32#
发表于 2018-11-14 09:59:10 | 只看该作者
#支持,好东西先收藏!
回复

使用道具 举报

31#
 楼主| 发表于 2018-11-14 08:17:38 | 只看该作者
本帖最后由 slore 于 2018-11-14 08:52 编辑
金辰影视 发表于 2018-11-14 06:15
支持值得点赞  在构建批处理加句自动退出感觉好一点


因为没有对构建做日志导出,所以停留看结果有没有错误。有错误的话,echo on来分析。
全部是脚本构成,asserts\page_build.js,自己把cmd  /k改成/c就不停留了。

你还可以在,config.js中添加一个
var $build_exit = 1;
在page_build.js根据这个变量决定/c还是/k。

更进一步,你可以在构建页面加一个 选择按钮,
js改变这个$build_exit变量。
回复

使用道具 举报

30#
发表于 2018-11-14 06:15:13 | 只看该作者
本帖最后由 金辰影视 于 2018-11-14 06:35 编辑
slore 发表于 2018-11-13 23:31
把这页占满吧。


支持值得点赞  在构建批处理加句自动退出感觉好一点
回复

使用道具 举报

29#
 楼主| 发表于 2018-11-13 23:31:05 | 只看该作者
把这页占满吧。
回复

使用道具 举报

28#
 楼主| 发表于 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, 下载次数: 457)

本来打算把2MB的WimBuilder2也一起带上,不过附件最大3MB,所以只传工程了。





回复

使用道具 举报

27#
 楼主| 发表于 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下面添加命令,可以直接使用。
回复

使用道具 举报

26#
 楼主| 发表于 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
复制代码


是不是很方便。
回复

使用道具 举报

25#
 楼主| 发表于 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
回复

使用道具 举报

24#
 楼主| 发表于 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边都修改,可以整合。
回复

使用道具 举报

23#
 楼主| 发表于 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"
复制代码


是不是很简单?
回复

使用道具 举报

22#
 楼主| 发表于 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你的浏览器中应该就可以显示它们了,点击试试吧。


你可以发现,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>
复制代码


是不是更好看了些。


下面是重点-如何将选项与补丁脚本(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美化范畴,我这里不多说了。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-27 10:31

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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