dos时代菜鸟 发表于 2019-6-21 23:45:51

用 pecmd2012 做个wimlib-imagex 安装系统的外壳 1.15.7

本帖最后由 dos时代菜鸟 于 2022-4-20 12:37 编辑

主要用于 win10 的安装 x86/x64

用这个 脚本 向 已有系统的 电脑上安装一个vhd_wimboot 模式的 win10 也是不错的选择,比如,办公电脑,可以把引导 做到u盘上,而 vhd+wimboot放在硬盘某个隐蔽的地方。

安装系统 简言之,就是 如下六个步骤。
0.准备好系统安装源,
1.硬盘分区格式化,
2.系统解压缩到分区,
3.安装系统引导体系,
4.重启,重启,再重启........安装各种驱动程序,
5.安装各种软件,对系统进行各种偏好设置。

这个脚本,就是在pe 或者 win 下,实现 第2 、3 步 用的,第1步可以通过压缩包中的 diskpart_shell.cmd 完成。第0步要用户自己把握,第4步依赖于系统的支持和用户手头的驱动程序集。第5步用户喜好不同。

1.15.7 核心脚本,内涵中英文 版本。核心脚本,不能单独运行 ,只是 pecmd脚本。


1.15.7 完整版在此(内涵 diskpart 外壳脚本):四个附件都要下载,把扩展名 .7z 去掉,再对 001 解压缩。





引入 pecmd 2012- 2021.05.26 ,不再依赖 diskpart 创建 vhd及其差分。


1.13.5




选定要安装的win10的压缩包(wim或者esd)对应的卷 ,设定系统安装分区和用于引导系统的分区,设定系统启动方式(UEFI 或者 bios),设定系统安装运转方式(wimboot 或者 不是wimboot ,传统解压缩 还是 VHDx) 逻辑实现:一、启动方面:根据用户选择,判断用于引导系统的分区指定位置是否具备启动系统所需的 BCD 引导,如果   没有,将在系统安装时 自动 创建         否则,向已存在的BCD 中增加一条启动项。二、wim解压缩方面判断用户选择,是否以 wimboot 方式安装,如果   是,在目标分区创建 wimboot 标记特点的 Wim文件指针,解压出用于创建引导用的bcdboot.exe相关文件,以wimboot方式解压wim中的文件                  如果 所选择的wim源 就存在于 目标分区,且已经具有 wimboot 特性,其扩展名是 Wim,就用该wim源左wimboot启动指针,而不单独创建wimboot 特性的wim.         否则,直接将wim源的内容解压到目标分区三、系统安装方面判断用户选择,是 传统方式 ,还是vhd 方式如果 传统方式,1、 直接解压2、 安装启动引导如果 VHDx方式,1、 创建 vhdx 文件,并将其挂载,分配临时盘符,2、 以wimboot 方式把具有 wimboot特性的wim解压到vhd3、 关闭vhdx ,创建该vhdx 的child_vhd4、 创建启动引导,将Child_vhd 最为启动指针创建到 BCD

需要对分区和盘符进行操作的,可以通过 脚本关联的 bootice 完成。如果有 efi 分区隐藏,而 boot_drv 需要指向之,就可以通过 bootice 为其分配个盘符,在指向它。

因为 编写的匆忙,环境有限,仅对 bios +vhd_wimboot 模式进行了简单测试,其他的 还需要进一步测试。

用于 安装 win10 install.wim的 脚本,一个界面包含了几乎全部设置,这样设计一定程度上方便了操作
但是 因为没有向导模式那样的傻瓜,很多 小白 会在设置的时候 丢三落四,导致安装出现问题,
这个其实是需要 对系统安装有一定 了解的人才能用的。比如对系统引导模式,硬件系统位数,系统分区结构类型,wimboot方式安装,vhd 方式安装 等等 都需要哪些必要条件。

比如:
wimboot 方式安装,需要 把 install.wim 转化为 wimboot类型存入 ntfs 分区才能设置 启动指针到 某个分区或者 vhd ,这一步脚本可以自动完成
vhd 方式安装的 系统 没有休眠功能,
wimboot方式安装,用于关联指针的 wimboot 类的 wim 是不能被删除的。如果关联指针是 vhd ,这个 vhd 自然也不能删除。

uefi 分 x64 和 x86 两种,通常 除少数平板类设备,都是 x64的,如果 你的硬件 是 uefi .x64 启动的,就没办法uefi.x86 方式启动。因为 x64 的硬件大部分兼容 x86 程序但 uefi 方面不兼容,如果你的硬件能够设置legacy 方式启动,倒是可以在 x64 下安装 x86 系统,但,也只能是安装 Legacy 的启动模式的 x64/x86 位 win10(MBR).


通常情况下 legacy bios模式 启动的,要用 MBR 结构的分区,硬盘上用于引导系统的分区 应该是 fat32/ntfs 类型的激活的主分区,而系统可以释放到任何地方,包括 vhd 里。当然 系统也释放到 这个主分区也是可以的。
uefi 模式启动的,要用 gpt 结构的分区,硬盘上的引导系统的分区应该是 fat32 格式的 esp 分区,而系统可以释放到 任何地方,包括 vhd 里,但是最好不要尝试释放到 esp 分区里。




特别说明:要想实现 win7 的 vhd+wimboot 启动,需要有 注入 wimboot 驱动的 win7 的 wim ,这个脚本 没有 向win7的Wim注入 wimboot 驱动的能力。


magicgenius 发表于 2019-6-22 08:10:50

厉害!下载测试……

2012jiashanni 发表于 2019-6-22 10:39:02

链接:https://pan.baidu.com/s/1ChsA4uqJAdsmnRqJxYFz-w
提取码:cwyr
复制这段内容后打开百度网盘手机App,操作更方便哦

ge 发表于 2019-6-22 19:52:09

有像winntsetup那样的!可以添加优化和注册表文件

dos时代菜鸟 发表于 2019-6-23 11:44:22

ge 发表于 2019-6-22 19:52
有像winntsetup那样的!可以添加优化和注册表文件

暂时不考虑这些,因为 wimboot 方式 安装的话,可能 一些释放出来的 注册表文件 只是一个 wim中的链接,无法在系统外修改。

dos时代菜鸟 发表于 2019-6-23 11:59:23

更新了一小下。
在一楼

dos时代菜鸟 发表于 2019-6-23 22:32:16

改进 win10.bcd 安装功能,感觉把 win10.bcd体系放入 vhd 不妥,因为如果整个软件包在 非 ntfs 分区上,vhd 就不能被装载了。所以还是放在文件夹吧,短名 调用,就可以避免 文件夹空格问题了。

更新了 1.07 放到一楼 地址文件。

dos时代菜鸟 发表于 2019-6-24 22:29:26

本帖最后由 dos时代菜鸟 于 2019-6-25 08:23 编辑

考虑增加 一个判断
当 源 wim 所选安装卷 具备 wimboot 特性,且 扩展名是 wim ,且 其恰好在 要安装系统的分区上,就直接使用 该wim 作为系统 wim ,而不另行生成 具备 wimboot 特性的 wim .这样 一来可以节省安装时间,二来 可以实现 一个 wim 制作多个 vhd 系统。


1.08 已经更新。

dos时代菜鸟 发表于 2019-6-25 20:40:36

更新 1.09.l
发现 pecmd 的 fdir 指令附带 --short 并不能获取短名文件路径,所以修正了一下。
另外,win7的 bootmgr 也可以引导 vhd,但是可能不能引导 vhdx,所以去掉手动安装 win10.bcd功能,节省了几十M的空间,改为 选项式,如果 引导分区 没有 bcd 体系,会自动勾选之。

就是需要注意,如果 用win7的bootmgr.bcd去引导 win10的 vhdx 可能会失败,此时如果引导分区有 win7 的 bootmgr.bcd ,就需要 安装时更新为 win10的。相反,如果已经有 win10的 bootmgr.bcd 而强行选择更新至 win7 的 bootmgr.bcd 可能导致硬盘上已有的 win10不能被成功调用。

ge 发表于 2019-6-27 08:06:59

dos时代菜鸟 发表于 2019-6-23 11:44
暂时不考虑这些,因为 wimboot 方式 安装的话,可能 一些释放出来的 注册表文件 只是一个 wim中的链接, ...

那WINNTSETUP不是就可以在系统安装完成未重启时修改的注册表吗?

ge 发表于 2019-6-27 08:07:11

dos时代菜鸟 发表于 2019-6-23 11:44
暂时不考虑这些,因为 wimboot 方式 安装的话,可能 一些释放出来的 注册表文件 只是一个 wim中的链接, ...

那WINNTSETUP不是就可以在系统安装完成未重启时修改的注册表吗?

dos时代菜鸟 发表于 2019-6-27 09:28:33

本帖最后由 dos时代菜鸟 于 2019-6-27 09:30 编辑

ge 发表于 2019-6-27 08:07
那WINNTSETUP不是就可以在系统安装完成未重启时修改的注册表吗?

winntsetup真没怎么用过,估计他是挂载了 wim 或者把 注册表文件真实解压释放了出来。

讲真,那些注册表 设置,很可能 随着 系统的变化而有所改变,轻的可能失效,严重的不知道会弄到啥机关上。没有点儿功力真不敢弄呀。

我都是 用 nlit 和 dism++ 做精简和封装的,有时候 把注册激活啥的也放进去,弄成个成型的 wim 用于安装。

给那些 注册表设置 做个界面倒也不难,
那些 现成的注册表 设置文件,弄个多选的列表 对应上,然后选确定,就执行regexport / import 啥的就行了。
关键是那些注册表设置文件的安全性和搜集都需要时间去弄。随着系统的变化,还要相应调整,有的win7 不能用,就是win10 的,不同版本有的也不好使。太费力气了。上了岁数,就变懒了,不能像以前几个通宵弄出个东西。

527104427 发表于 2019-6-27 09:45:44

dos时代菜鸟 发表于 2019-6-27 09:28
winntsetup真没怎么用过,估计他是挂载了 wim 或者把 注册表文件真实解压释放了出来。

讲真,那些注 ...

最近挺多产的,感觉还是精力充沛的样子,不像上了年纪嘛

dos时代菜鸟 发表于 2019-6-27 09:47:09

527104427 发表于 2019-6-27 09:45
最近挺多产的,感觉还是精力充沛的样子,不像上了年纪嘛

是 pecmd 2012 的功劳,我只是代码的搬运工。{:1_191:}

527104427 发表于 2019-6-27 09:53:06

dos时代菜鸟 发表于 2019-6-27 09:47
是 pecmd 2012 的功劳,我只是代码的搬运工。

太低调了,纵使pecmd再强大,也需要能驾驭它的人,菜鸟兄的实力不是一般人能比的。

dos时代菜鸟 发表于 2019-6-27 21:29:26

本帖最后由 dos时代菜鸟 于 2019-6-27 21:32 编辑

更新一小下。
涉及的改进主要考虑如下方面。

bcdboot 这个命令 要求 source 必须是不带空格的路径,或者用 短名路径格式表示,但是 偏偏我这个 笔记本 就是无法把长文件名和带空格的文件路径转换成短的。这个不是 pecmd 的问题,也不是系统的问题,可能是 ntfs 分区的时候出的问题。
针对这样的罕见问题, win10.bcd 的手动安装 还是需要调整一下,把 事先准备好的 x64/x86 的win10.bcd 用7z压缩了,用的时候释放到 目标分区根下,再用 bcdboot 进行bootmgr+bcd的安装,然后再删了那些 解压出来的东西。

这个跟在安装过程中自动 安装 bcd 体系没关系。 所以 不带 win10bcd手动安装 按钮的 精简版不涉及这个问题。

精简版和 有 bcd 手动安装功能的 版本合一了,如果 把 win10.bcd.7z 和 7z.exe \7z.dll 删除, “BCd手安装” 的按钮就自动不可见了。

vrboxing 发表于 2019-7-1 08:30:10

老兄的作品总是这么给力!
能提供一个有 注入 wimboot 驱动的 win7 (x64)的 wim吗?推荐一个也行,这几天在一台Macbook Pro2015上折腾装Win7 64,快累死,真是岁月不饶人啊

dos时代菜鸟 发表于 2019-7-1 08:40:54

vrboxing 发表于 2019-7-1 08:30
老兄的作品总是这么给力!
能提供一个有 注入 wimboot 驱动的 win7 (x64)的 wim吗?推荐一个也行,这几天 ...
论坛找 chenal 的辅助工具,可以向 win7 中注入 wimboot 驱动。

vrboxing 发表于 2019-7-1 09:29:48

dos时代菜鸟 发表于 2019-7-1 08:40
论坛找 chenal 的辅助工具,可以向 win7 中注入 wimboot 驱动。

多谢多谢!

dos时代菜鸟 发表于 2019-7-3 10:20:36

刚刚增加了几个 按钮和文本框
用于 显示刷新 硬盘分区序列的简要信息,提供了一个简要的帮助文档,可以探测 wim 中被选卷 的 win版本和 位数用于判断 vhd 还是 vhdx 以及 让用户根据 系统位数判断 用什么方式启动系统。

singel 发表于 2019-7-6 01:00:50

感谢大哥分享!试用一下

gnuxwy 发表于 2019-7-6 21:09:20

呃,一个实用脚本工具,或许以后用得着,标记备用之。。。楼主辛苦了。

dos时代菜鸟 发表于 2019-7-10 09:58:56

本帖最后由 dos时代菜鸟 于 2019-7-10 10:48 编辑

做了一些小的调整更新, 1.10j 版
改进硬盘分区序列的 获取算法,增加 可以自动 为 没有盘符的卷装卸盘符。

自动分配盘符功能,基于 pecmd 的 part 和 disk 两个指令,找出 可以分配盘符而又没有盘符的分区,也就是 具有 volume 特性的分区,win 可以识别的可分配盘符的分区,对其进行分配盘符。并记录 下来。如果 linux 分区,当前系统没有相关驱动,就不能获取 volume 的特性信息,也就不必考虑为其分配盘符,也不显示在分区序列中。

卸载自动分配的盘符,就是 根据 记录 将自动分配的盘符卸载掉。

可以 探测各分区上 windows\explorer.exe 的版本来获取 是否存在windows 以及windows的版本。

Anson4 发表于 2019-7-10 10:44:58

居然是开源的,有利于我等菜鸟学下,感谢分享!

dos时代菜鸟 发表于 2019-7-10 10:46:55

Anson4 发表于 2019-7-10 10:44
居然是开源的,有利于我等菜鸟学下,感谢分享!

没有盈利,为啥不开源?
互相学习才有提高呀。

dos时代菜鸟 发表于 2019-7-10 22:25:06

改进了一下,1.10k 版,脚本启动自动给没有盘符的分区分配盘符,退出时再卸载哪些盘符。这样是不是更方便些呢?

nttwqz 发表于 2019-7-10 22:36:23

楼主的版本号,貌似以我这智商理解不了啊。。。

dos时代菜鸟 发表于 2019-7-11 11:38:06

本帖最后由 dos时代菜鸟 于 2019-7-11 11:39 编辑

nttwqz 发表于 2019-7-10 22:36
楼主的版本号,貌似以我这智商理解不了啊。。。

1.10 是主干版本。
后面跟 ABCDEF..... 是表示小的改进,如果还有更小的改进,就只修改 压缩包 名字添加一个 -1 -2 -3 -4 啥的,其实就是 为了与之前版本做个区分。
再后面跟个 .L 表示是 精简版的。

nttwqz 发表于 2019-7-11 13:29:10

本帖最后由 nttwqz 于 2019-7-11 13:30 编辑

dos时代菜鸟 发表于 2019-7-11 11:38
1.10 是主干版本。
后面跟 ABCDEF..... 是表示小的改进,如果还有更小的改进,就只修改 压缩包 名字   ...

个人感觉还是用主流的版本号x.x.x.x表示比较容易理解

https://jingyan.baidu.com/article/8cdccae9659f5c315413cde6.html

dos时代菜鸟 发表于 2019-7-11 14:56:55

nttwqz 发表于 2019-7-11 13:29
个人感觉还是用主流的版本号x.x.x.x表示比较容易理解

https://jingyan.baidu.com/article/8cdccae96 ...

呵呵呵,好吧,好吧
页: [1] 2 3 4 5 6 7 8
查看完整版本: 用 pecmd2012 做个wimlib-imagex 安装系统的外壳 1.15.7