利用$OEM$文件夹制作Windows7多版本合集_操作系统
写这个的目的是希望对大家OEM多合一制作有进一步的理解,摒弃偏见,享受DIY的乐趣。
OEM激活要具备三个要素:证书、OEM SLP KEY和主板BIOS具备SLIC,WINDOWS VISTA要求为SLIC2.0,WINDOWS 7要求为SLIC2.1,SLIC2.1一般情况兼容2.0,SLIC是有区分品牌的。第三个要素在硬件上,即你的主板要符合激活要求。举例:你的主板 BIOS有联想的SLIC2.1,你现在想安装WINDOWS 7 专业版,如果光盘中有整合联想的证书,同时整合专业版的SLP KEY(不限品牌),安装后将自动激活。OEMLOGO、壁纸、帮助、服务网址等属OEM体验与厂商服务范畴,不是构成激活的必要条件。
下面的讲解主要就OEM激活的前两个要素展开,因为第三个要素是硬件上而不是光盘上。
一、$OEM$文件夹的优势与不足
优势:操作简便快捷,不需要复杂的IMAGEX命令或DISM命令,只需要UltraISO这样光盘处理小软件就可以了,制作好的$OEM$文件夹只需加入到ISO文件的sources目录下就可以了。应该说人人皆宜。(忘记说了,ISO的sources目录下的ei.cfg要删除掉或替换掉)
替换成这样的ei.cfg:
[EditionID]
Ultimate
Professional
HomePremium
HomeBasic
Starter
[Channel]
OEM
[VL]
3
不足:主要体现在多品牌的制作上,一般来说制作OEM版是需要一些LOGO,那怕是简单点,这时候$OEM$文件夹就会体现出它的不足来了。在制作33in1这样的大合集,如果不去动到install.wim这个文件,恐怕难以做到,更主要的是人们习惯在开始安装时有个选择菜单然后选择一个品牌来安装,这是$OEM$文件夹无法做到。
二、$OEM$文件夹发布的基本原理
利用$OEM$文件夹来发布共享,不是WINDOWS 7的专利,XP时期就有了。
1、$OEM$文件夹的调用
安装复制文件时,光盘中SOURCES中的$OEM$文件夹里面的文件或文件夹会被复制到C盘下的指定目录内。(安装分区以C盘为例)
2、$OEM$文件夹的基本结构
里面的文件(夹)按什么规则进行复制呢?路径怎么确定?先看一下$OEM$文件夹一个例子(联想恢复盘风格为例),文件目录结构和文件如下:
H:\$OEM$
+---$$ ---------此目录内的文件复制到C盘WINDOWS目录内
| +---Panther ---------此目录及目录内文件夹、文件复制到C盘WINDOWS目录内,下同。
| | unattend.xml
| |
| +---Resources
| | \---Themes
| | Lenovo_1.theme
| | Lenovo_2.theme
| | Lenovo_3.theme
| | Lenovo_4.theme
| |
| +---Setup
| | \---Scripts ---------此目录内的文件是用来导入OEM SLP KEY(必须的)
| | HbSlp.cmd ---------CMD文件(可并入OOBE.CMD)
| | HpSlp.cmd --------- CMD文件(可并入OOBE.CMD)
| | oobe.cmd ---------CMD 主文件(必须的)
| | ProSlp.cmd --------- CMD文件(可并入OOBE.CMD)
| | StaSlp.cmd --------- CMD文件(可并入OOBE.CMD)
| | UltSlp.cmd --------- CMD文件(可并入OOBE.CMD)
| |
| +---System32
| | +---OEM ---------此目录是用来放置OEM证书,以便激活程序查找(必须的)
| | | lenovo.oemcert.100036.xrm-ms ------证书(必须的)
| | | Lenovo.reg
| | |
| | \---OOBE
| | \---info
| | | Lenovo.bmp
| | | Lenovo.png
| | | logo.bmp
| | | mcelogo.png
| | | oobe.xml
| | | PLA.rtf
| | | userlenovo.png
| | |
| | +---Backgrounds
| | | BackgroundDefault.jpg
| | |
| | \---default
| | \---2052
| | oobe.xml
| | PLA.rtf
| |
| \---Web
| \---Wallpaper
| +---Lenovo_1
| | Lenovo_11.jpg
| | Lenovo_12.jpg
| | Lenovo_13.jpg
| | Lenovo_14.jpg
| | Lenovo_15.jpg
| | Lenovo_16.jpg
| |
| +---Lenovo_2
| | Lenovo_21.jpg
| | Lenovo_22.jpg
| | Lenovo_23.jpg
| | Lenovo_24.jpg
| |
| +---Lenovo_3
| | Lenovo_31.jpg
| | Lenovo_32.jpg
| | Lenovo_33.jpg
| | Lenovo_34.jpg
| |
| \---Lenovo_4
| Lenovo_41.jpg
| Lenovo_42.jpg
| Lenovo_43.jpg
| Lenovo_44.jpg
|
\---$1 ---------此目录内的文件复制到C盘根目录下
\---Users
\---Default
\---Favorites
\---Lenovo
联想.url
联想支持.url
重点看一下$$、$1以及几个标有“必须的”文件夹和文件。这些文件安装开始时被复制到指定的位置,安装程序将在OOBE阶段开始之后调用它们,安装KEY和证书。
$$、$1内的文件夹、文件复制到对应目录,比如$$内有一个Panther文件夹复制到C盘WINDOWS目录内,如果C盘WINDOWS里面已有一个Panther文件夹,那么将是合并这两个文件夹,如果没有,那么就是复制添加Panther文件夹(包括$$\Panther里面子文件夹和文件)到安装分区的Windows目录下。
如: 以安装分区为C盘为例:
$$\System32\oem对应的是C:\windows\system32\oem
$1\Users\Default\Favorites\Lenovo对应的是C:\Users\Default\Favorites\Lenovo
如果是D盘:
$$\System32\oem对应的是D:\windows\system32\oem
$1\Users\Default\Favorites\Lenovo对应的是D:\Users\Default\Favorites\Lenovo
3、安装程序是什么时候安装KEY和证书呢?
安装程序是OOBE阶段安装KEY和证书。OOBE 阶段包含以下 Windows 任务:
- Unattend (oobeSystem)
- WinSAT
- OOBE.cmd
- OOBE 向导(欢迎使用 Windows)
- OOBE 任务
- 重新启动(可能)
- Setupcomplete.cmd
- 登录
- 首次登录命令
- 桌面
证书的安装是在导入KEY之后,证书的安装是不需要我们手工加入CMD命令的,当然你要添加也可以。CMD命令导入KEY之后,安装程序会自动搜索 windows\system32\oem目录,如果里面有适合于BIOS SLIC的证书,将自动安装此证书。这就是制作通用版本的原理,因为KEY是不同版本通用的,安装时导入KEY之后,将自动搜索oem目录,如果我们把所有品牌的证书都放在这里,不管你安装什么品牌,安装程序都可以找到证书,并自动帮你安装适合你的BIOS SLIC的证书,从而实现自动激活。
总结一下,利用$OEM$文件夹发布共享,我们不需要用复杂的IMAGEX或 DISM命令去解开install.wim文件。目的很简单,就是安装开始时,预先把导入KEY的CMD文件和证书复制到安装分区的WINDOWS中的指定目录内,让安装程序帮你导入KEY和证书,而不是安装结束后你自己手工去做这件事。
既然安装程序能帮你事先KEY和证书,这种事何乐而不为!
特别是证书的安装,这种方法比系统安装后手工导入要方便许多,WINDOWS安装程序的证书安装是智能安装,安装程序会搜索WINDOWS\SYSTEM32\OEM目录内的最合适的证书,如果是你自己导入证书,有时还搞不清楚是哪个证书是合适的,因为有的品牌有好几个证书。
三、OOBE.CMD中多版本导入KEY的命令
有时候我是用多个CMD文件来安装不同版本的KEY,当然也可以将这几个CMD合并到OOBE.CMD文件之中。
1、多个CMD文件的OOBE.CMD文件命令示例:
@echo off
start /w regedit /s %systemroot%\System32\oem\Lenovo.reg
reg QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "EditionID" > %TEMP%\Edition.txt
findstr /i "homeBasic" "%TEMP%\Edition.txt" && call %systemroot%\setup\scripts\HbSlp.cmd
findstr /i "Starter" "%TEMP%\Edition.txt" && call %systemroot%\setup\scripts\StaSlp.cmd
findstr /i "HomePremium" "%TEMP%\Edition.txt" && call %systemroot%\setup\scripts\HpSlp.cmd
findstr /i "Professional" "%TEMP%\Edition.txt" && call %systemroot%\setup\scripts\ProSlp.cmd
findstr /i "Ultimate" "%TEMP%\Edition.txt" && call %systemroot%\setup\scripts\UltSlp.cmd
del /F /Q %systemroot%\setup\scripts\HpSlp.cmd
del /F /Q %systemroot%\setup\scripts\ProSlp.cmd
del /F /Q %systemroot%\setup\scripts\UltSlp.cmd
del /F /Q %systemroot%\setup\scripts\StaSlp.cmd
del /F /Q %systemroot%\setup\scripts\HbSlp.cmd
del /F /Q %systemroot%\system32\oem\Lenovo.reg
:Cleanup
del /F /Q %systemroot%\setup\scripts\oobe.cmd
分析:
start /w regedit /s %systemroot%\System32\oem\Lenovo.reg ,注册表写入OEM信息(非必要)
reg QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "EditionID" > %TEMP%\Edition.txt ,此时将安装版本信息EditionID导出,转变为Edition.txt 文件。
findstr /i "homeBasic" "%TEMP%\Edition.txt" && call %systemroot%\setup\scripts\HbSlp.cmd,如果在Edition.txt 找到“homeBasic”字样,将调用HbSlp.cmd文件导入homeBasic的OEM SLP KEY;如果在Edition.txt 中找到“Ultimate”字样,将调用UltSlp.cmd文件导入Ultimate版本的OEM SLP KEY;其他几个不一细述。再下几行是删除CMD文件的命令,因为后面我们不再需要这些CMD文件。
2、单个CMD文件的OOBE.CMD文件命令示例:
(意思是只用一个OOBE.CMD就可以了)
@echo off
reg QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "EditionID" > %TEMP%\Edition.txt
findstr /i "Ultimate" "%TEMP%\Edition.txt" && cscript %windir%\system32\slmgr.vbs -ipk 6K2KY-BFH24-PJW6W-9GK29-TMPWP
findstr /i "Professional" "%TEMP%\Edition.txt" && cscript %windir%\system32\slmgr.vbs -ipk 32KD2-K9CTF-M3DJT-4J3WC-733WD
findstr /i "HomePremium" "%TEMP%\Edition.txt" && cscript %windir%\system32\slmgr.vbs -ipk 27GBM-Y4QQC-JKHXW-D9W83-FJQKD
findstr /i "homeBasic" "%TEMP%\Edition.txt" && cscript %windir%\system32\slmgr.vbs -ipk 22MFQ-HDH7V-RBV79-QMVK9-PTMXQ
findstr /i "Starter" "%TEMP%\Edition.txt" && cscript %windir%\system32\slmgr.vbs -ipk TGBKB-9KBGJ-3Y3J6-K8M2F-J2HJQ
:Cleanup
del /F /Q %systemroot%\setup\scripts\oobe.cmd
分析:findstr /i "Ultimate" "%TEMP%\Edition.txt" && cscript %windir%\system32\slmgr.vbs -ipk 6K2KY-BFH24-PJW6W-9GK29-TMPWP,这里只不过把原来调用的UltSlp.cmd文件里面的内容搬进OOBE.CMD文件而已。不细述了。