找回密码
注册 登录
查看: 2280|回复: 4

Windows 7 部署过程中的一些控制

[复制链接]

该用户从未签到

发表于 2012-12-22 21:17:04 | 显示全部楼层 |阅读模式

                  转自:http://zxkh19501.blog.163.com/blog/static/12378517920126271147583/

(教程中批处理内容差不多都是用蓝色表示,要替换的批处理段落通常是用绿色来表示。为保证避免转载过程造成的颜色差异所引起的问题,故把转载地址放在首行。本人秉持着经验传递的精神来分享此贴,不存在抄袭。整篇文章内容未作只字修改,保证原文正品O(∩_∩)O。


所谓“部署过程中的一些控制”是指Win7安装过程中添加驱动、启用Administrator、OEM自动识别与激活、注册表修改等等。

制作多合一的WIM一般是这样的过程。

第一步,封装一个有补丁和IE9的WIM出来,这个教程的讲的就是这一过程:http://zxkh19501.blog.163.com/blog/static/1237851792012635360717/,此时我们获得一个WIM文件,x64ult.wim。言下之意,封装出来的这个是旗舰版的WIM文件,里面只有一个卷映像,这个卷映像中没有任何OEM资料,需要自行激活。在OEM合集中通常被称为“Retail”。

如果想略过这一步,你可以提取出来官方原版64位的旗舰版出来。具体操作是将install.wim提取到某分区(虚拟光驱动也可以行,路径稍有不同),然后执行IMAGEX命令:imagex /export H:\install.wim 4 H:\x64ult.wim

第二步,以“Retail” 为基础,通过添加不同的OEM资料,在Wim文件中增加卷映像,形成多个OEM版本,类似33in1这样的合集。制作方法参考:http://zxkh19501.blog.163.com/blog/static/1237851792012612114029919/

但为什么添加了OEM资料包后就可以启用Administrator,就可以直接登录桌面,就可以自动识别OEM信息自动激活,就可以右键增加“记事本打开”等选项呢?这就是Win7安装过程中的个人DIY要控制的一些内容。这个中间环节以前一直没细说,因为大家都是用现成的OEM资料包就可以。今天补上这一些环节,但可能也不会全,比如OEM主题订制、OOBE.CMD中的OEM自动识别等还涉及不到(有空再说),但会讲到大家很关心的驱动包调用及外置接口的使用原理以及启用Administrator等问题。

你现有使用的操作系统最好是Win7(或R2),然后备一张带有X64\X86的PE光盘,这样可以通吃X86和X64的Win7。如果虚拟机里有Win7也是可行的,比如现有操作系统是64位的,虚拟机里是32位的WIN7,有时候需要到32位WIN7中去执行一些批处理。一般来说你要处理X86的WIM,最好是在X86的环境中,这方面DISM命令比较挑剔,IMAGEX相对自由些。

一、驱动包调用及外置接口的使用原理

驱动包调用分两种:一是安装过程中,二是安装结束后首次进入桌面时。

1、安装过程中调用驱动包的实现

我们拿刚封装出来的x64ult.wim为例,此时,WIM中只有一个“Retail”版本。WIM复制一份作为备份,以防制作过程中没处理好。在H分区建一个文件夹(举例:mywim),将x64ult.wim移进来。执行IMAGEX命令行,将x64ult.wim 挂载到H:\mywim\Temp_wim目录下。

MD H:\mywim\Temp_wim

imagex /info H:\mywim\x64ult.wim 1 “Windows 7 旗舰版 64位 [Retail]" "Windows 7 旗舰版"

imagex /mountrw H:\mywim\x64ult.wim 1 H:\mywim\Temp_wim

copy H:\mywim\Temp_wim\windows\system32\config\system H:\mywim

pause

如果没有异常,关闭批处理窗口。此时一个名为“system“的文件(无后缀名)被复制到mywim目录下。这是x64ult.wim中的注册表文件之一。下面要对其进行修改,添加安装过程中调用驱动包的命令。

Windows键+R键,运行“regedit”,调出现在系统的注册表,点击一下“HKEY_LOCAL_MACHINE”,“文件”处选“加载配置单元”,打开前面复制出来的名叫“system“的文件,会让你命名,如X64WIN7,随意取吧。







如上图,你需要修改X64win7中setup里边的Cmdline的值,这里我们举例是个CMD文件,这个文件必须放在WIM中的windows\system32目录下。Dep.cmd的内容如下:

@echo off

if exist "%SystemDrive%\Drv\Drv.exe" (

   Start /wait %SystemDrive%\Drv\Drv.exe

)

Start /wait %SystemRoot%\System32\oobe\windeploy.exe

命令的主要内容是,如果存在驱动包的执行文件(Drv.exe)就调用,如果没有就略过。你不一定非得用CMD文件这种形式,也可以用AU3编写个EXE文件,以免安装时弹出个批处理的框框不好看。也可以下载我做好的DepX64.exe、DepX86.exe(附件下载 ),一个用于64位,一个用于32位,如果用这两个文件之一,修改Cmdline的值就不是改成Dep.cmd,而是改为DepX64.exe,或DepX86.exe。或者别人的你不一定放心,你自己做一个,给个AU3代码你自己看。

_Windows_X64()

Exit

Func _Windows_X64()

         Local $SystemDrive = EnvGet("SystemDrive")

If FileExists($SystemDrive & "\Drv\Drv.exe") Then

        RunWait($SystemDrive & "\Drv\Drv.exe")

         RunWait($SystemDrive & "\Windows\System32\Oobe\WinDeploy.exe")

Else

         RunWait($SystemDrive & "\Windows\System32\Oobe\WinDeploy.exe")

EndIf

EndFunc

都改好之后,点一下“X64WIN7”,“文件”处“卸载配置单元”,这样,mywim目录下的“system”文件就保存了修改的注册表信息。将“system”文件复制到H:\mywim\Temp_wim\windows\system32\config目录下,替换旧的,将Dep.cmd复制到H:\mywim\Temp_wim\windows\system32目录下。

(如果你不想再对WIM进行什么修改,直接看本文的第四部分)

2、进入桌面调用驱动包的实现

安装结束后首次进入桌面,如果运行一次某个批处理或EXE文件,通常是预先在注册表里加上Runonce(只运行一次)命令,而不是用Run命令,因为RUN命令每次登录桌面都会运行,你需要删除注册表键值才不会每次如此。 如何预先在注册表中加入Runonce命令,后面我们会讲到。这里先说一下,首次进入桌面后用到的批处理文件,主要用于清理系统安装完成后产生的多余文件,以及调用驱动包(绿色字部分)等等。 假定这个批处理文件叫End.cmd,添加卷映像时把它放在H:\mywim\Temp_wim\windows\setup目录下。批处理文件的内容如下:

@Echo Off

COLOR 2F

echo  关闭休眠功能

%windir%\system32\powercfg.exe -h off >nul

echo 清理安装过程的临时文件

IF EXIST "C:\SWTOOLS" RD /Q /S C:\SWTOOLS

IF EXIST "%Systemroot%\Setup\OEMFILES" RD /Q /S %Systemroot%\Setup\OEMFILES

IF EXIST "%Systemroot%\Setup\AIDA64" RD /Q /S %Systemroot%\Setup\AIDA64

IF EXIST "%SYSTEMDRIVE%\AIDA64 REPORTS" RD /Q /S "%SYSTEMDRIVE%\AIDA64 REPORTS"

IF EXIST "%windir%\Setup\Scripts" (

attrib -R -A -S -H %windir%\Setup\Scripts\*.* >nul

rd /q /s %windir%\Setup\Scripts >nul

)

IF EXIST "%windir%\Panther\unattend.xml" (

attrib -R -A -S -H %windir%\Panther\unattend.xml >nul

del /q /f %windir%\Panther\unattend.xml >nul

)

echo 调用驱动包中的EXE文件(如果有)

IF EXIST "%SystemDrive%\Drv\Drv.exe" (

   start %SystemDrive%\Drv\Drv.exe

)

del %0

说明:用上“IF EXIST”的意思是,如果指定目录有Drv.exe,那么就运行Drv.exe,如果不存在,则略过,运行下一行(段)命令。这个End.CMD用于桌面调用驱动包的,不会删除系统分区的下Drv和Drivers目录,你要自己手动处理。如果要用于安装过程中调用驱动包的版本,那么上述绿色字部分替换成下面那样:

IF EXIST "%windir%\System32\DepX64.exe" (

attrib -R -A -S -H %windir%\System32\DepX64.exe >nul

del /q /f %windir%\System32\DepX64.exe >nul

)

IF EXIST "%windir%\System32\DepX86.exe" (

attrib -R -A -S -H %windir%\System32\DepX86.exe >nul

del /q /f %windir%\System32\DepX86.exe >nul

)

IF EXIST "%SystemDrive%\Drv" RD /Q /S "%SystemDrive%\Drv

IF EXIST "%SystemDrive%\DrIvers" RD /Q /S "%SystemDrive%\DrIvers

.

二、激活内置管理员Administrator

先下载个示例材料($OEM$文件夹,附件),$$目录是与上述的WIM挂载目录H:\mywim\Temp_wim中的windows目录相对应,复制时,就是将$$目录的所有文件夹复制到wiindows目录下。

$OEM$\$$\Panther中有个unattend.xml文件,系统安装时会自动调用这个XML文件。XML的格式是一段前行与后行对称,在一行中也是头与尾对称。格式不能出错,你可以用AIK中的“Windows 系统映像管理器”来验证格式。

示例材料是用于简体中文X64(64位)。如果用于简体中文X86(32位),要将$OEM$\$$\Panther中的unattend.xml文件中的几处"amd64"改为"x86"(用记事本打开即可修改)


如果你需要部署过程中增加一段(或多段)命令来运行CMD文件(或EXE文件)。如下图,复制命令段落并相应修改,添加一段来执行Add.cmd(举例的名字)的命令段落。比如,通过Add.cmd来执行一些常用运行库的安装等等。




settings pass="specialize"表示部署过程中要执行的一些处置,可以加载CMD或EXE文件,以及进行一些系统设置。

settings pass="oobeSystem"表示在登录前要执行的一些处置,可以加载CMD或EXE文件,以及进行一些系统设置。

示例材料中,我们让安装程序在specialize阶段执行一个ActAdmin.cmd文件,激活内置管理员帐号,所以不应当在登录前才处理的。这个CMD文件放在Setup目录下(其实示例中提到的CMD文件,REG文件都我都放在这个目录下)。

ActAdmin.cmd文件具体内容:

@Echo Off

COLOR 2F

net user Administrator /active:yes

net user Administrator_ploc /active:yes

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v FilterAdministratorToken /t REG_DWORD /d 0 /f

del %0

这样,我们通过unattend.xml文件来执行ActAdmin.cmd这个批处理以达到激活内置管理员administrator的目的,为自动登录创造条件。

、进行一些简单的系统设置订制

如下图,我们将执行下一个名为“MyDiy.cmd”文件,用它来执行一些注册表修改、运行EXE文件等。这个文件也在Setup目录下。


这个CMD文件的内容如下:

::执行一个右键添加“显示隐藏文件与后缀名”的EXE文件::

start /wait %windir%\Setup\Hidden.exe >nul

::导入要修改的注册表项::

start /wait regedit /s %windir%\Setup\MyDiy.reg >nul

del /q /s %windir%\Setup\Hidden.exe >nul

del /q /s %windir%\Setup\MyDiy.reg >nul

del %0

MyDiy.reg的内容如下:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel]

;在桌面上显示个人文件夹图标 dword:00000001为不显示

"{59031a47-3f72-44a7-89c5-5595fe6b30ee}"=dword:00000000

;在桌面上显示计算机图标

"{20D04FE0-3AEA-1069-A2D8-08002B30309D}"=dword:00000000

;在桌面上显示网络图标

"{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}"=dword:00000000

[HKEY_CLASSES_ROOT\*\shell\Notepad]

@="用记事本打开该文件"

[HKEY_CLASSES_ROOT\*\shell\Notepad\Command]

@="notepad %1"

;开始菜单显示“运行”栏

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]

"Start_ShowRun"=dword:00000001

;首次进入桌面运行%windir%\setup\end.cmd

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce]

"aa"=hex(2):25,00,77,00,69,00,6e,00,64,00,69,00,72,00,25,00,5c,00,53,00,65,00,\

  74,00,75,00,70,00,5c,00,45,00,6e,00,64,00,2e,00,63,00,6d,00,64,00,00,00

说明:前面所说的如何在首次进入桌面后调用end.cmd来运行驱动包,就在此时(登录桌面前)写入注册表。如果你是想安装过程中调用驱动的,“首次进入桌面后调用end.cmd来运行驱动包”(绿色字)这一段注册表修改项都删除掉。

四、封装

假定你在第一部分“安装过程中调用驱动包的实现”时,将x64ult.wim挂载到H:\mywim\Temp_wim目录下,也假定你准备好了$OEM$文件夹中的所有材料,那么,复制$OEM$中的$$目录下的所有文件夹到H:\mywim\Temp_wim\Windows目录下,提示合并时就合并(如果你仅仅是修改第一部分的所说的“system“的文件,不想订制别的任何内容,连$OEM$文件夹都不用准备,不需要复制什么)。然后,执行IMAGEX命令。


imagex /commit /append H:\mywim\Temp_wim “Windows 7 旗舰版 64位 [MyDiy]"

imagex /unmount H:\mywim\Temp_wim

PAUSE

到此为止,x64ult.wim中添加了一个新的卷映像(原先的"Retail"没有变化),这个新的卷映像我们用“MyDiy”来表示,这个映像能调用安装目录分区下Drv文件夹中的驱动包了。将x64ult.wim改名为install.wim,用ultraiso打开官方原版64位WIN7的ISO文件,将新的install.wim替换进sources目录,然后,在sources目录建立一个$oem$文件夹,下一级再建一个$1文件夹,再下一级再建一个Drv文件夹,将驱动包中的EXE文件及其平行的文件夹一起拖进Drv中,将EXE文件改名为Drv.exe。另存ISO,虚拟机测试一下那个标识有“MyDiy”的那个版本,看看是不是大功告成。

五、其他

示例材料中还有AIDA64、OEMFILES、Scripts文件夹,都是跟OEM自动识别、激活有关的,这里不介绍了(有空再说吧),你照用就是了。因为OEMLOGO图片等文件比较多比较大,示例材料中没有提供,但有提供证书。

真有用到OEMLOGO资料包,比较完整的到这里下载:http://zxkh19501.blog.163.com/blog/static/12378517920126149350305/。示例材料只是用来教程演示用的。

本文中很多都是用批处理的形式来处理,如果你精通AU3,你都可以将CMD文件变成EXE文件。不过打包成EXE,看起来专业点,但放心度却下降了,起码CMD文件很容易用记事本打开看看,到底是什么东西。闲话。


附件:
示例材料($OEM$文件夹):
DepX64.exe、DepX86.exe:
http://dl.vmall.com/c0n624bmdw














上一篇:求Win8原版桌面壁纸!
下一篇:求助,文件共享
  • TA的每日心情
    开心
    11 小时前
  • 签到天数: 2666 天

    [LV.Master]伴坛终老

    发表于 2012-12-22 21:38:31 | 显示全部楼层
    thank you very so much

    点评

    老大,你这句话是不是该换一换啦。我一个不懂英语的人,都会默写你这句话了。。。。  详情 回复 发表于 2012-12-22 21:59
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2012-12-22 21:59:03 | 显示全部楼层
    hmaaaa 发表于 2012-12-22 21:38
    thank you very so much

    老大,你这句话是不是该换一换啦。我一个不懂英语的人,都会默写你这句话了。。。。file:///E:\360data\重要数据\AppData\Local\Temp\OKJ6~EMI{G6]XV64~ANV%(F.giffile:///E:\360data\重要数据\AppData\Local\Temp\OKJ6~EMI{G6]XV64~ANV%(F.gif 未命名.gif
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2012-12-23 10:01:43 | 显示全部楼层
    moyi20 发表于 2012-12-22 21:59
    老大,你这句话是不是该换一换啦。我一个不懂英语的人,都会默写你这句话了。。。。

    哈哈 版版好幽默啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-11-2 11:52
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2013-3-11 16:25:18 | 显示全部楼层
    图挂了,不过支持技术贴
    回复 支持 反对

    使用道具 举报

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

    本版积分规则