无忧启动论坛

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

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

    [复制链接]
2431#
发表于 2019-11-1 20:53:22 | 只看该作者
ddsony 发表于 2019-11-1 20:14
M大出来了,有什么问题抓紧问他,什么时候隐退了,就又没机会了。

感谢 ddsony 兄的告知!上述问题我马上发短信向他请教。有劳了。
回复

使用道具 举报

2432#
 楼主| 发表于 2019-11-1 21:25:05 | 只看该作者
本帖最后由 slore 于 2019-11-1 21:32 编辑
WAIGO 发表于 2019-11-1 20:07
环境变量不是全局的,你在一个cmd,批处理中call 调用getwiminfo.cmd,这个cmd和批处理中可以用这些环境变 ...


仔细看了下,你是显示当前PE的版本信息。不是获取其他的wim镜像信息。那么有几个方案:

方案1(推荐):
直接离线用WimBuilder2的补丁 使用TextReplace 替换。

MyPECMD\
    pecmd.ini 预先写上
TEXT 正在准备 Windows #WIM_VER_STR# 企业版 PE,请稍侯 ……

    last.bat
call TextReplace "%X_SYS%\pecmd.ini" #WIM_VER_STR# "%WIM_VER% %WIM_ARCH%"


推荐理由,不用额外exec调用getwiminfo,也不用把wimlib-image.exe放到PE。

(离线的话,也可以直接改写注册表,添加一个全局的环境变量,如果只给pecmd.ini用的话,直接改文本简单)


方案2(启动时动态获取):

getwiminfo.cmd之后把结果输出到临时文件
pecmd中读取文件,获取字符串,设置为变量给TEXT使用

或者调用系统的setx命令,设置为全局变量,pecmd中可直接使用。

注意点:
需要setx命令
全局变量,如果中途不删除的话,会一直带到桌面,所有程序运行都有此信息

PECMD也一定有管道获取批处理的输出使用的方法,不过PECMD的语法设计比较难懂,而且不是面向对象,
字符串操作可以做,同样代码很难看懂。


至于你说的在PECMD.ini前运行,也是可以的,不过批处理窗口不是隐藏的,
pecmd调用exec, 批处理,批处理中继续调用pecmd.exe pecmd.ini,需要3层进程运行,为了这么点功能没必要。

pecmd.exe
    cmd.exe xxxx.bat
         pecmd.exe pecmd.ini


动态获取还有个问题,得循环找启动光盘是吧。要是别的磁盘上上sources\boot.wim,或者修改boot.wim就不行了。
不过直接从 ver命令获取系统版本信息就够了,好像也不要查询wim文件。

当然动态的好处是,一次写好不用修改了。
(WimBuilder2把编辑pecmd.ini改成批处理代码的话,1句补丁,永久有效,所以优点也不明显。)

点评

非常感谢!就采用方案一吧。有点不太明白的就是 #WIM_VER_STR# 包含 "%WIM_VER% 及 %WIM_ARCH%" 两个内容吗? 我需要的 PECMD.INI 代码是: SET &WinVerStr=10 %WIM_VER% %WIM_ARCH%  详情 回复 发表于 2019-11-1 22:01
回复

使用道具 举报

2433#
发表于 2019-11-1 22:01:27 | 只看该作者
slore 发表于 2019-11-1 21:25
仔细看了下,你是显示当前PE的版本信息。不是获取其他的wim镜像信息。那么有几个方案:

方案1(推荐) ...

非常感谢!就采用方案一吧。有点不太明白的就是 #WIM_VER_STR# 包含 "%WIM_VER%  及 %WIM_ARCH%" 两个内容吗?

我需要的 PECMD.INI 代码是:

SET &WinVerStr=10 %WIM_VER% %WIM_ARCH%                                    `设置 PE 启动标题
SET &Model=Windows 10 %WIM_ARCH% 企业版 PE,版本 %WIM_VER%   `控制面版 PE 版本显示

然后在内文才有:

TEXT 正在准备 Windows %&WinVerStr% 企业版 PE,请稍侯 …… #0xFFFFFF,$22

这个 #WIM_VER_STR# 要如何加在 SET &WinVerStr=10 %WIM_VER% %WIM_ARCH%  命令之上呢?另外 SET &Model 这句的 %WIM_VER% %WIM_ARCH% 不是连在一起和排列次序相反的,要如何写才可以?

还有,last.bat
call TextReplace "%X_SYS%\pecmd.ini" #WIM_VER_STR# "%WIM_VER% %WIM_ARCH%"

是放在 bin 目录内吗?

点评

我只是一个例子,TextReplace就是文本内容替换,pecmd.ini你预先用#WIM_VER_STR#占一个位置, 替换成你想要的就行了,你想拼接多少,什么顺序你自己决定啊。 任何补丁能运行到的last.bat都可以。你想放到那里  详情 回复 发表于 2019-11-1 22:36
回复

使用道具 举报

2434#
 楼主| 发表于 2019-11-1 22:36:23 | 只看该作者
本帖最后由 slore 于 2019-11-1 22:39 编辑
WAIGO 发表于 2019-11-1 22:01
非常感谢!就采用方案一吧。有点不太明白的就是 #WIM_VER_STR# 包含 "%WIM_VER%  及 %WIM_ARCH%" 两个内 ...


我只是一个例子,TextReplace就是文本内容替换,pecmd.ini你预先用#WIM_VER_STR#占一个位置,

替换成你想要的就行了,你想拼接多少,什么顺序你自己决定啊。

任何补丁能运行到的last.bat都可以。你想放到那里很自由,我不知道你自定义补丁是什么结构。

你放到工程的last.bat,或者final.bat都行,只要是 pecmd.ini已经复制过之后都可以。


如果不是连续的字符串,你多调用几次TextReplace一次替换一个变量即可(g参数,文件中的所有匹配字符串都替换)。

call TextReplace "%X_SYS%\pecmd.ini" #WIM_ARCH# "%WB_PE_ARCH%" g
call TextReplace "%X_SYS%\pecmd.ini" #WIM_VER# "%WB_PE_VER%" g

点评

今天又发现了一个问题,#WIM_VER# "%WB_PE_VER%" 并没有记录下完整的版本编号,只有编号的整数部分。如图一及二所示,"18362.10024" 被缩短成 "10.0.18362" 了。其实这个 "10.0" 是可以精简掉的,但小数的部分却不可  详情 回复 发表于 2019-11-2 09:35
依照老大的提议终于改好了,下面图一、二都是根据自动获取的资料编辑的。再次感谢! [attachimg]404276[/attachimg] [attachimg]404277[/attachimg]  详情 回复 发表于 2019-11-2 05:49
回复

使用道具 举报

2435#
发表于 2019-11-2 05:49:17 | 只看该作者
slore 发表于 2019-11-1 22:36
我只是一个例子,TextReplace就是文本内容替换,pecmd.ini你预先用#WIM_VER_STR#占一个位置,

替换 ...

依照老大的提议终于改好了,下面图一、二都是根据自动获取的资料编辑的。再次感谢!



回复

使用道具 举报

2436#
发表于 2019-11-2 09:35:21 | 只看该作者
slore 发表于 2019-11-1 22:36
我只是一个例子,TextReplace就是文本内容替换,pecmd.ini你预先用#WIM_VER_STR#占一个位置,

替换 ...

今天又发现了一个问题,#WIM_VER# "%WB_PE_VER%" 并没有记录下完整的版本编号,只有编号的整数部分。如图一及二所示,"18362.10024" 被缩短成 "10.0.18362" 了。其实这个 "10.0" 是可以精简掉的,但小数的部分却不可以。例如这个 "18362.10024" 在 UUP 显示是属於预览版的 "Windows 10 Version Next (10.0.18362.10024) amd64",但还有个属於正式版的 "Windows 10 Version 1903 (18362.449) amd64"。

捨弃小数后的部分,同称 18362 并不妥当,有什么补救的办法呢?



点评

看到 last_wimbuilder.log 构建信息的开头有如下叙述: 工序:获取WIM文件信息 WB_PE_ARCH=x64 WB_PE_BUIID=1 WB_PE_LANG=zh-CN WB_PE_VER=10.0.19013 其中的 "WB_PE_VER=10.0.19013" 以及 "WB_PE_ARCH=x6  详情 回复 发表于 2019-11-2 09:38
回复

使用道具 举报

2437#
 楼主| 发表于 2019-11-2 09:38:59 | 只看该作者
本帖最后由 slore 于 2019-11-2 09:40 编辑
WAIGO 发表于 2019-11-2 09:35
今天又发现了一个问题,#WIM_VER# "%WB_PE_VER%" 并没有记录下完整的版本编号,只有编号的整数部分。如图 ...

看到 last_wimbuilder.log 构建信息的开头有如下叙述:

工序:获取WIM文件信息
WB_PE_ARCH=x64
WB_PE_BUIID=1
WB_PE_LANG=zh-CN
WB_PE_VER=10.0.19013

其中的 "WB_PE_VER=10.0.19013" 以及 "WB_PE_ARCH=x64" 这两段信息可以设置成全局变数吗?我在 PECMD.INI 把它设置成划线下的格式又是失败了。奈何!


另外有一个 VER[3] 的环境变量代表 19013 .

点评

我上面写的是今天做的另一个版本编号为 10.0.18362.10024 的 Windows 预览版 PE,它另有正式版为 18362.449。故而同称 10.0.18362 并不妥当。 昨晚做的那个 10.0.19013 版 PE 的全名是 "10.0.19013.1",最后那个  详情 回复 发表于 2019-11-2 10:33
回复

使用道具 举报

2438#
发表于 2019-11-2 10:09:37 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-11-2 10:12 编辑

请问下slore大神,用LUA+WINXSHELL方案,组件→外壳→开始菜单→startisback已经勾选了,同时也勾选了winxshell,那默认开始菜单还是winxshell?怎么设置为startisback优先?        

QQ拼音截图20191102101106.png (107.44 KB, 下载次数: 112)

QQ拼音截图20191102101106.png

点评

只能用开源的Open-Shell。StartIsBack检测条件不知道。  详情 回复 发表于 2019-11-2 10:22
回复

使用道具 举报

2439#
 楼主| 发表于 2019-11-2 10:22:11 | 只看该作者
liuzhaoyzz 发表于 2019-11-2 10:09
请问下slore大神,用LUA+WINXSHELL方案,组件→外壳→开始菜单→startisback已经勾选了,同时也勾选了winxs ...

只能用开源的Open-Shell。StartIsBack检测条件不知道。

点评

open-shell 是原来的classicshell中的ClassicStartMenu组件的开源项目。。。  详情 回复 发表于 2019-11-4 12:00
StartIsBack必须要依赖explorer.exe作为shell是吗?如果用winxshell作为shell就不能用StartIsBack,只能用开源的Open-Shell,是这个意思吗?  详情 回复 发表于 2019-11-2 12:16
回复

使用道具 举报

2440#
发表于 2019-11-2 10:33:04 | 只看该作者
本帖最后由 WAIGO 于 2019-11-2 10:35 编辑
slore 发表于 2019-11-2 09:38
另外有一个 VER[3] 的环境变量代表 19013 .


我上面写的是今天做的另一个版本编号为 10.0.18362.10024 的 Windows 预览版 PE,它另有正式版为 18362.449。故而同称 10.0.18362 并不妥当。

昨晚做的那个 10.0.19013 版 PE 的全名是 "10.0.19013.1",最后那个 .1 舍弃了同样不妥当。因为 UUP 昨天又把 "10.0.19013.1" 更新成为 "Windows 10 Version Next (10.0.19013.1000) " 了。总不能同称为 10.0.19013 吧?

现在的问题是 WB_PE_VER=10.0.19013,只可以代表编号的整数部分,有没有什么变量可以截取到 10.0.19013.1 或 10.0.19013.1000 的完整编号呢?

点评

看前面回复  发表于 2019-11-2 10:35
回复

使用道具 举报

2441#
发表于 2019-11-2 11:06:37 | 只看该作者
本帖最后由 WAIGO 于 2019-11-2 11:08 编辑

您前面回复说,"另外有一个 VER[3] 的环境变量代表 19013 .",是否表示有小数点后的部分(例如 19013.1000)?是的话用下面写法可以吗?

call TextReplace "%X_SYS%\pecmd.ini" #WIM_VER# "%VER[3]%" g

点评

前面红字,你自己都摘出来了啊。  发表于 2019-11-2 11:14
回复

使用道具 举报

2442#
发表于 2019-11-2 12:16:18 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-11-2 12:17 编辑
slore 发表于 2019-11-2 10:22
只能用开源的Open-Shell。StartIsBack检测条件不知道。


1、StartIsBack必须要依赖explorer.exe作为shell是吗?如果用winxshell作为shell就不能用StartIsBack,只能用开源的Open-Shell,是这个意思吗?
2、开源的Open-Shell我不了解,是否已经融入winxshell,作为winxshell的一部分?      

点评

另外安装。WinXShell里面有截图,就是以前的Classic Shell,一个贝壳图标的。作者不更新就开源了。 风格有很多种也挺好的,所以WinXShell的开始菜单我没有开发,要做的话,会是移植Linux或者Windows 10 X 的新风  详情 回复 发表于 2019-11-2 12:24
回复

使用道具 举报

2443#
 楼主| 发表于 2019-11-2 12:24:09 | 只看该作者
本帖最后由 slore 于 2019-11-2 12:26 编辑
liuzhaoyzz 发表于 2019-11-2 12:16
1、StartIsBack必须要依赖explorer.exe作为shell是吗?如果用winxshell作为shell就不能用StartIsBack, ...


另外安装。WinXShell里面有截图,就是以前的Classic Shell,一个贝壳图标的。作者不更新就开源了。

风格有很多种也挺好的,所以WinXShell的开始菜单我没有开发,要做的话,会是移植Linux或者Windows 10 X 的新风格。

最新版会检测程序名字必须是explorer.exe,用binmay修改下dll中的unicode字符串,或者改名WinXShell.exe才可以用。

双11版本,我添加下好了。
你可以提前使用配置下自己的风格。
回复

使用道具 举报

2444#
发表于 2019-11-2 12:57:36 来自手机 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-11-2 12:59 编辑

只用winxshell的开始菜单,我可以接受。有两个网友说喜欢startisback的风格,所以我有此一问,似乎之前你回复过,知识点太多,我忘记了。 多个选择当然是更好了。      
回复

使用道具 举报

2445#
发表于 2019-11-3 13:49:31 | 只看该作者
本帖最后由 狼人72105 于 2019-11-3 13:51 编辑

大佬。。这个是什么问题?怎么解决啊?

sshot-1.jpg (510.53 KB, 下载次数: 122)

sshot-1.jpg

点评

版本,还有构建选项。去掉自定义的补丁和精简,是否有问题?  详情 回复 发表于 2019-11-3 14:14
回复

使用道具 举报

2446#
发表于 2019-11-3 14:14:22 | 只看该作者
感谢楼主分享
回复

使用道具 举报

2447#
 楼主| 发表于 2019-11-3 14:14:43 | 只看该作者
狼人72105 发表于 2019-11-3 13:49
大佬。。这个是什么问题?怎么解决啊?

版本,还有构建选项。去掉自定义的补丁和精简,是否有问题?
回复

使用道具 举报

2448#
发表于 2019-11-4 00:39:13 | 只看该作者
I encountered an error with the slore master. I'm getting an error in the dual-session winpe de imdisk setup. There is no error when I create without selecting admin account but it gives error with admin account
When you click on the attached 78Setup64 program it automatically installs imdisk but does not install on dual systems.

78setup.zip (612.37 KB, 下载次数: 7)

回复

使用道具 举报

2449#
发表于 2019-11-4 00:41:33 | 只看该作者
This account does not work when I select and create an admin account

  1. call V2X ImDisk -extract "imdiskinst.exe" "%X_SYS%\ImDisk"
复制代码

点评

V2X -extract only means extract the files to system32\ImDisk folder. you need register/install the driver offline/on booting.  详情 回复 发表于 2019-11-4 00:44
回复

使用道具 举报

2450#
 楼主| 发表于 2019-11-4 00:44:40 | 只看该作者
gazi06 发表于 2019-11-4 00:41
This account does not work when I select and create an admin account

V2X -extract only means
extract the files to system32\ImDisk folder.
you need register/install the driver offline/on booting.

点评

The program cannot install imdisk when it is created with admin account.  详情 回复 发表于 2019-11-4 01:38
回复

使用道具 举报

2451#
发表于 2019-11-4 01:38:04 | 只看该作者

can you try the program

本帖最后由 gazi06 于 2019-11-4 01:39 编辑
slore 发表于 2019-11-4 00:44
V2X -extract only means
extract the files to system32\ImDisk folder.
you need register/install  ...


The program cannot install imdisk when it is created with admin account.





setup succeeds when created with a single account







can you try the program
78setup.zip (612.37 KB, 下载次数: 1)

点评

If you want me to try it, you should share your ImDisk patch, not just 78setup.exe.  详情 回复 发表于 2019-11-4 07:54
put the install bat to OSInit\ than Starup\ folder.  详情 回复 发表于 2019-11-4 07:52
回复

使用道具 举报

2452#
发表于 2019-11-4 07:25:15 | 只看该作者
楼主,这是为啥?

点评

文件名用英文试试。另外mui文件不用自己写。自动会添加,不过你只做中文PE,无所谓。  详情 回复 发表于 2019-11-4 07:56
回复

使用道具 举报

2453#
 楼主| 发表于 2019-11-4 07:52:21 | 只看该作者
gazi06 发表于 2019-11-4 01:38
The program cannot install imdisk when it is created with admin account.

put the install bat to OSInit\ than Starup\ folder.
回复

使用道具 举报

2454#
 楼主| 发表于 2019-11-4 07:54:31 | 只看该作者
gazi06 发表于 2019-11-4 01:38
The program cannot install imdisk when it is created with admin account.

If you want me to try it, you should share your ImDisk patch, not just 78setup.exe.

点评

also fails in startup folder  详情 回复 发表于 2019-11-4 12:02
回复

使用道具 举报

2455#
 楼主| 发表于 2019-11-4 07:56:39 | 只看该作者
834772509 发表于 2019-11-4 07:25
楼主,这是为啥?

文件名用英文试试。另外mui文件不用自己写。自动会添加,不过你只做中文PE,无所谓。
回复

使用道具 举报

2456#
发表于 2019-11-4 12:00:24 | 只看该作者
slore 发表于 2019-11-2 10:22
只能用开源的Open-Shell。StartIsBack检测条件不知道。

open-shell 是原来的classicshell中的ClassicStartMenu组件的开源项目。。。
回复

使用道具 举报

2457#
发表于 2019-11-4 12:02:40 | 只看该作者
slore 发表于 2019-11-4 07:54
If you want me to try it, you should share your ImDisk patch, not just 78setup.exe.

also fails in startup folder

ImDisk.rar (425.74 KB, 下载次数: 5)

点评

Everything is right on my side. You didn't give me the ImDisk Patch(main.bat show me how you install imdisk), so I don't know why you failed. Here is my ImDisk Patch:  详情 回复 发表于 2019-11-5 00:33
回复

使用道具 举报

2458#
发表于 2019-11-4 14:07:05 来自手机 | 只看该作者
最新的版本是否都支持微软自带的远程桌面连接服务了?

点评

最高到v1809可以正常使用。再高版本目前不行。  发表于 2019-11-4 14:30
RS5,高版本黑屏,没继续调查了。  发表于 2019-11-4 14:29
回复

使用道具 举报

2459#
 楼主| 发表于 2019-11-5 00:33:29 | 只看该作者
gazi06 发表于 2019-11-4 12:02
also fails in startup folder

Everything is right on my side.
You didn't give me the ImDisk Patch(main.bat show me how you install imdisk),
so I don't know why you failed.

Here is my ImDisk Patch:
ImDisk_Patch.zip (517.21 KB, 下载次数: 6)

点评

setup with your code successfully. The code in me didn't work. I just put imdisk.cmd in the startup folder. thanks master  详情 回复 发表于 2019-11-5 15:04
回复

使用道具 举报

2460#
发表于 2019-11-5 07:46:10 来自手机 | 只看该作者
有个问题一直很奇怪,为啥我生成的PE用DISM++挂载后需要Trustedinstaller权限才能编辑?有没有什么批处理可以解决?省的每次都要手动修改成everyone权限

点评

原生winre.wim就是一样吧。我的工具是直接TrustedInstaller进行编辑的,没动文件权限。你可以离线生成时就全部改成everyone过构建时间会多2,3分钟。  详情 回复 发表于 2019-11-5 08:10
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-27 03:58

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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