|
我把编译的程序和源代码以及ISOCMD上传了。坑爹的附件尺寸要小于102.4KB,只能上传到迅雷快传了
http://kuai.xunlei.com/d/ZVTHQTVUGTSM----已失效
http://kuai.xunlei.com/d/ZOLIIJPQIMPZ
有些注意事项在14楼
第四步有个小错误,修正了一下
感谢“极度凶残”在27楼提出合盘的隐藏分区安装方法,win7 2008 8 2012 vista都可以用win8合盘的方式在隐藏分区完美安装的方法,只需要在第四步中的winpeshl.ini中把showdriver.exe放到setup32.exe上面,并把showdriver.exe放到system32里面就可以了
这几天琢磨着把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里的文件名一样。
四、料理boot.wim
首先准备好ISOCMD,这个是UltraISO的虚拟光驱用的。网上有下载,很多。下载下来解压出来一共是三个文件:IsoCmd.exe、ISODrive.sys、ISODrv64.sys。
此处有错误先把Windows 8 32 位的光盘镜像里面的SOURCES文件夹解压到移动硬盘更目录下并重命名为win8setup。只能用32位的。
把win8setup下面的boot.wim复制出来放到其他地方,此处有错误
正确的应该是把前面做好的光盘镜像重命名为win8setup32.iso和win8setup64.iso,放到移动硬盘根目录下。
(本文只以win8setup32.iso作为例子,64位的win8setup64.iso方法一样,32位和64位整合到一起的单镜像也一样)
提取出32位的boot.wim并复制到e:\,然后在e:\下新建一个文件夹boot,打开cmd窗口,运行一下命令。
dism /mount-wim /wimfile:e:\boot.wim /index:2 /mountdir:e:\boot
接下来,进入E:\boot\sources,把setup.exe改名为winsetup.exe,注意需要先获取所有权。然后把刚刚编译好的setup.exe连同IsoCmd的三个文件一起放到E:\boot\Windows\system32里面,然后在E:\boot\Windows\system32下面新建winpeshl.ini文件,用记事板打开,粘贴下面的代码,保存。
[LaunchApps]
setup64.exe
这些做完,确认无误后,打开cmd窗口,敲入命令,保存对映像的修改。
dism /unmount-wim /mountdir:e:\boot /commit
需要注意的是,保存卸载之前一定要把和e:\boot有关的文件夹和文件完全关闭,否则会卸载失败。
卸载完成后把e:\boot.wim复制到移动硬盘的根目录下面,并重命名为win8setup32.wim。这个名字随意,但是要和BCD里面的一样。
然后把第二步做好的光盘镜像复制到移动硬盘的根目录下面,并重命名为win8setup32.iso,这个名字要和autoit脚本里面的设置的文件名一样。
五、设置从移动硬盘启动
U盘和移动硬盘的设置方法大同小异,基本一样。这里只讲讲移动硬盘,相信不会有多少人用U盘做的。
首先,从已经安装好的Windows 8系统里面的boot文件夹和bootmgr复制到根目录,当然,用光盘镜像里面boot和bootmgr也行,不过中文显示不出来。然后用bcdedit命令或者easybcd、bcdtool修改boot\bcd启动类型。具体方法也不详述了,这不是重点。以下是我的bcd配置,大家可以做个参考。
C:\Users\Administrator>bcdedit /store h:\boot\bcd
Windows 启动管理器
--------------------
标识符
{bootmgr}
device partition=H:
description Windows Boot Manager
locale zh-CN
inherit {globalsettings}
default {default}
displayorder {default}
{50e83817-fbdd-11e1-9589-14feb5e094f3}
{b4b7350f-fcc1-11e1-a38e-14feb5e094f3}
{37156ebf-fbde-11e1-9589-14feb5e094f3}
toolsdisplayorder {memdiag}
timeout 30
dispalybootmenu Yes
Windows 启动加载器
-------------------
标识符 {7619dcc9-fafe-11d9-b411-000476eba25f}
device ramdisk=[boot]\sources\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
path \windows\system32\boot\winload.exe
description 安装 Windows 7 SP1 , Server 2008 R2,OEM 50 IN 1.(全版本,X86+X64)
locale zh-CN
inherit {bootloadersettings}
osdevice ramdisk=[boot]\sources\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
systemroot \windows
nx OptIn
pae Default
custom:250000c2 1
detecthal Yes
winpe Yes
sos No
debug No
ems No
Windows 启动加载器
-------------------
标识符 {50e83817-fbdd-11e1-9589-14feb5e094f3}
device ramdisk=[boot]\win8setup32.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
path \windows\system32\boot\winload.exe
description 安装 Windows 8 32位
locale zh-CN
inherit {bootloadersettings}
osdevice ramdisk=[boot]\win8setup32.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
systemroot \windows
nx OptIn
pae Default
custom:250000c2 1
detecthal Yes
winpe Yes
sos No
debug No
ems No
Windows 启动加载器
-------------------
标识符 {b4b7350f-fcc1-11e1-a38e-14feb5e094f3}
device ramdisk=[boot]\win8setup64.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
path \windows\system32\boot\winload.exe
description 安装 Windows 8 64位
locale zh-CN
inherit {bootloadersettings}
osdevice ramdisk=[boot]\win8setup64.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
systemroot \windows
nx OptIn
pae Default
custom:250000c2 1
detecthal Yes
winpe Yes
sos No
debug No
ems No
Windows 启动加载器
-------------------
标识符 {37156ebf-fbde-11e1-9589-14feb5e094f3}
device ramdisk=[boot]\sources\WIN7PE.WIM,{7619dcc8-fafe-11d9-b411-000476eba25f}
path \windows\system32\boot\winload.exe
description 启动 Windows 7 PE x86
locale zh-CN
inherit {bootloadersettings}
osdevice ramdisk=[boot]\sources\WIN7PE.WIM,{7619dcc8-fafe-11d9-b411-000476eba25f}
systemroot \windows
detecthal Yes
winpe Yes
ems No
C:\Users\Administrator>
1、直接bootmgr启动。
这种方法最简单也最方便。如果对硬盘内容有洁癖的话,在磁盘管理器里面分个足够大小的主分区,格式化为NTFS文件系统,设置为活动就可以了。
2、用easyboot启动。
这个方法稍微有点麻烦,但是从美观和灵活性来说,我还是比较喜欢这种,但是也有两个缺点。一是分区必须是FAT32格式的,二是不能针对该分区进行检查修复操作(包括开机时候提示的那种磁盘检查,这种情况多发生于正在对改分区写入数据的时候强行拔下数据线),如果不幸被检查修复了,只会从bootmgr启动了。
首先,用easyboot做一个足够好看的启动界面,做完以后将EZBOOT文件夹放到分区根目录下。并将EZBOOT下的EZLDR复制到根目录下。
然后,打开UltraISO,点击菜单栏的启动→写入硬盘映像,弹出窗口中选择硬盘驱动器为你要制作启动盘的那个移动硬盘,这里只会显示USB接入的存储设备。点击下面的便捷启动,在写入新的硬盘主引导记录(MBR)中选择USB-HDD+,提示写入成功后,再次点击便捷启动,在写入新的驱动器引导扇区中选择EasyBoot,提示写入成功后就可以关闭了。现在,你的移动硬盘或者U盘就可以从easyboot制作的启动菜单启动了。
要注意的是,写入硬盘映像的移动硬盘只能有一个分区,如果后面有第二个,或者更多的分区怎么办?没关系,直接在系统自带的磁盘管理中删除后面的所有分区,包括扩展分区,只保留第一个分区。这样就可以写入主引导记录和引导扇区了。另外如果不幸启动分区被检查修复了,也可以用这个方法,只需要重新写入引导扇区就可以了。
那么删除的分区怎么办?看下面。
对于删除掉的分区可以用Acronis进行恢复,这个东西恢复分区效果杠杠的。
我用的是Acronis Disk Director 11 Advanced,网上下载的非常多,这里我给大家提供两枚序列号。
Advanced Workstation:
H9NL5SZ5-EN6BD5ED-A7P9D22V-8WXZ5QAG-4G5XK7JS-X52BEDQX-J9J8UUAC-KRLG8GAT
Advanced Server:
XMSZFNCK-4XGKSW6X-TH4XGVX6-EZFW9ZBE-KVK2DMLW-LJVT2WXD-9JKQADAV-SUFCULHU
Acronis是根据序列号区分版本的。
言归正传,先打开Advanced,点上方的工具→Acronis Recovery Expert,点下一步,选择手动,下一步,选择那个被删除的区域。
点击下一步,默认快速,下一步,程序已经搜索到了刚刚删除的那个分区,选中,点下一步,下一步,继续,程序会自动处理,处理完了,弹出恢复完成的窗口。
这是我的移动硬盘根目录
这个分区大小是20G,这些东西14.4G
这个是H:\SOURCES里面,这里面的install.wim集成了Windows 7的9个版本,Windows 2008的8个版本,和25个OEM的Windows 7 旗舰版的32位和64位,共50个,总计67个映像。因为Windows 7的9个版本全部集成最新的补丁和IE9,有点大,达到了5.68G,无奈只能分卷。
用移动硬盘启动的界面,别吐槽背景,几年前做的。QQ和邮箱都是我的真实QQ和邮箱。
不解释,自己看图
用Windows 8的启动文件,不见了难看的载入进度条
bootmgr的第一个启动项目,集成了64个映像
Windows 8安装
MAXDOS
[ 本帖最后由 2012velino 于 2012-10-16 20:22 编辑 ] |
|