积分 35 最后登录 2023-1-29 精华 0 阅读权限 10 主题 4 UID 407797 帖子 87 PB币 53 威望 0 贡献 0 技术 0 活跃 89
UID 407797 帖子 87 PB币 53 贡献 0 技术 0 活跃 89
本帖最后由 velino 于 2012-9-13 11:26 编辑
本人原帖地址: http://bbs.wuyou.com/post.php?action=edit&fid=45&tid=256556&pid=2565605&page=1&extra=page%3D1
我把编译的程序和源代码以及ISOCMD上传了。坑爹的附件尺寸要小于102.4KB,只能上传到迅雷快传了
http://kuai.xunlei.com/d/ZVTHQTVUGTSM
有些注意事项在14楼
第四步有个小错误,修正了一下
三楼多图
这几天琢磨着把 Windows 7 , Windows 2008 , Windows 8 这几个系统 32 位和 64 位的整合到一起。
开始只是简单的将 7/8/2008 的 install.wim 整合到一起,测试的时候发现如果使用 Windows 7 的镜像 7/2008 可以正常安装,但是 win8 却无法正常安装。
而如果用 Windows8 光盘镜像的话,则出现很奇怪的问题,不是 Windows 7 找不到 License ,要不就是 Windows 8 找不到 License 。而 Windows 2008 肯定是找不到 License ,即使把 boot.wim:2 里面 License 文件全数复制到 Windows 8 的 boot.wim 也不行。
之后在网上查到个方法,把这几个不同系统的 SOURCES 文件夹改名,然后用 WinHex 修改 boot.wim:2 中的 SOURCES\setup.exe 和光盘根目录下的 SOURCES\autorun.dll ,改成对应的路径,但是测试过很多遍,始终无法成功。
经过不断的搜索、测试,终于找到了一个办法。
PE 启动时会在 X:\SOURCES 目录下寻找 setup.exe 文件来进行安装, 如果 SOURCES 目录没有 SETUP.EXE ,那么 winpeshl.exe 会执行 system32 目录下的 winpeshl.ini 所指定的文件。如果 winpeshl.ini 没有指定程序或没有此文件,那么 winpeshl.exe 将会执行 system32 目录下的 startnet.cmd 文件,默认 PE 下存在此文件,会加载网络配置。我们解决这个 boot.wim ,可以使用 imagex 也可以使用 sources 目录的 dism.exe 。
我的构思是,用 bootmgr 启动一个 Windows 8 的 PE ,这个 PE 从光盘镜像里的 boot.wim 修改而来,启动 PE 后,用教本和工具挂载位于移动硬盘或 U 盘的 Windows 8 的光盘镜像,然后自动运行镜像根目录下的 setup.exe ,开始安装。
废话结束了,现在开始动手吧。
================万恶的分隔符 ====================
一、准备一个移动硬盘,如果有足够大的 U 盘也行。
可以把移动硬盘前面分出一个 10G 或 20G 的分区,如果你还要放入 Windows 7 、 Windows 2008 的话,建议 20G 。
另外,如果希望是直接用 bootmgr 启动的话,用 NTFS 文件格式,在磁盘管理器里面设置为活动,可以省不少的事情。如果···想和我一样,用 easyboot 启动的话,就一定要用 FAT32 文件格式了,具体操作在后面详述。如果之前做过 Windows 7 移动硬盘安装,里面应该还有 Windows 7 的文件夹。 当然,如果不准备加入 Windows 7 的话,可以用官方的工作制作,下面就不用看了。
如果 install.wim 文件超过了 4G ,可以用 imagex /split 命令对 install.wim 进行分卷。 Install.wim 分卷后的后缀名一定 swm 。 install.swm 、 install1.swm 、 install2.swm ……
我把 Windows 7 和 Windows 2008 还有 25 个品牌的 OEM 系统的 32 位和 64 位,总共 67 个镜像,有更新最新的补丁和 IE ,最终得到 install.wim 是 5.68G ···
命令格式:
imagex /split install.wim install.swm
4000 复制代码
后面的 4000 表示大小,单位是 M
二、整合 Windows 8 的 3 个版本的 32 位和 64 位,共 6 个。
标准版和专业版里面的 install.wim 都包含这两个版本,企业版的 install.wim 中只有企业本的镜像。所以只需要把企业版的镜像整合到标准版和专业版里面。
用 imagex /export 命令进行整合,相信大家都会了,此处不再赘述了。
需要注意的是, 32 位和 64 位里面的镜像名称和描述都是一样的,在进行 32 位和 64 位整合的时候一定要先用 imagex /info 命令修改名称和描述。
还有要注意的是, Windows 8 里面的 ei.cfg 不能直接删除,否则安装程序会要你先输入序列号。用记事本打开 sources\ei.cfg ,删除里面的所有内容,把下面的代码复制到里面保存即可。
[EditionID]
Professional
Enterprise
Starter
HomeBasic
HomePremium
Professional
Ultimate
[Channel]
Retail
Volume
OEM
[VL]
5 复制代码
将做好的 install.wim 和 ei.cfg 用 UltraISO 替换到 32 位的系统镜像中。不需要解压出来。只能用 32 位的。我因为特殊原因,只能将 32 位和 64 位做成两个镜像。如果大家用的最简单的启动方式而且是 NTFS 分区, 32 位和 64 位做到一个镜像里面也行,方法大同小异。
三、用 Autoit 制作一个能直接调用 setup.exe 的程序
此处的 setup.exe 是光盘镜像根目录下的 setup.exe ,而不是 SOURCES 里面的 setup.exe 。
相信大家对 Autoit 都不会陌生, XP 时代做 Windows 集成的时候多多少少都会用到。
没有的可以去 http://www.autoitx.com/ 上免费下载一个,安装好以后,打开桌面上的 SciTE 编辑器,然后粘贴下面一段代码,保存。
#NoTrayIcon
$temp = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"
$findiso = StringSplit($temp, ",")
For $n = 1 To $findiso[0]
If FileExists($findiso[$n] & ":\win8setup32.iso") Then
$root = $findiso[$n]
ExitLoop
EndIf
Next
$file = FileOpen("x:\windows\system32\loadiso.cmd", 9)
FileWrite($file, "cd %systemroot%\system32" & @CRLF & "IsoCmd.exe -I" & @CRLF & "IsoCmd.exe -Mount 0: " & $root & ":\win8setup32.iso" & @CRLF & "del %0")
FileClose($file)
RunWait("x:\windows\system32\loadiso.cmd", "x:\windows\system32", @SW_HIDE)
$findsetup = StringSplit($temp, ",")
For $n = 1 To $findsetup[0]
If FileExists($findsetup[$n] & ":\setup.exe") And FileExists($findsetup[$n] & ":\SOURCES\setup.exe") And FileExists($findsetup[$n] & ":\SOURCES\install.wim") Then
$isoroot = $findsetup[$n]
ExitLoop
EndIf
Next
RunWait($isoroot & ":\setup.exe")
复制代码
注意:代码第五行和第十一行的 win8setup32.iso 根据需要改成需要的文件名。
打开工具→编译脚本 [GUI] ,弹出编译窗口,输出类型为 exe ,在 32 位程序后面的文本框中输入 setup32.exe ,输出架构只需要勾选使用 X86 版本,然后点编译脚本,编译完毕后会在脚本的同路径下生成一个 setup32.exe 文件。放好备用。保存的文件名随意,但是一定要和 winpeshl.ini 里的文件名一样。
====未完,楼下继续====
展开阅读全文​