分享

【第六章】《步步为营封 Win7》进阶部署控制

 木秀-- 2012-03-10

【第六章】《步步为营封 Win7》进阶部署控制

使用和拓展系统封装与部署技术的目的有二:
1、在尽可能保证稳定的基础上加快系统安装速度,减少重复的机械化的无意义劳动,提高工作效率;
2、降低技术门槛,让需要多步骤执行的过程简化为按几个按钮就能完成的事情。
如果是为了这两个目的考虑,那么我们在学会了基本的部署阶段控制的基础上,就要拓展一些内容了。在上一章里我说过,一般的WIN7封装与部署有两个缺点:
1、使用非ADMIN登陆不符合中国用户的习惯;
2、繁琐的OOBE过程有效的降低了我们的工作效率,增加了不必要的负担。
那么本章的目的就明确了:
1、想办法自动激活ADMIN账户;
2、跳过OOBE过程;
3、接管部署过程以实现1和2。


(一)自动激活 ADMIN
WIN7的ADMIN账户默认是禁用的,我们可以在封装前将其设置为启用,而后方便我们的自动化封装工作。
但烦人的问题也随即出现了,ADMIN账户在封装后又会自动改为禁用。本想大不了在封装后再手工开启呗,结果发现部署完成后ADMIN账户又自动禁用了(无语……)。好吧,看来微软是无论如何也要禁用ADMIN了,那么这个问题就由我们来解决吧。
1、激活 ADMIN 账户的方法
这个并不复杂,其实只需要一行批处理命令就可以了:

  1. net user Administrator /Active:yes
复制代码

这个命令是WIN7自带的,不是第三方的,所以稳定性和适用性无需担心。
AU3的写法是:

  1. RunWait(@ComSpec & " /c " & "net user Administrator /Active:yes", "", @SW_HIDE)
复制代码

大家可以参照
2、激活 ADMIN 的时机
系统部署到进入桌面的过程大致为:
系统部署-->重启-->系统OOBE-->首次登录-->桌面
在“系统部署”这个步骤完成后系统会自动禁用ADMIN账户,而我们如果跳过了OOBE过程,就直接到了“首次登录”这个步骤。但这样就造成了问题,即ADMIN没有被激活,跳过OOBE后又没有新账户可以用(除非封装前残留了其他账户),这样就造成了系统内无可用用户!这个后果就严重了,没有用户可用,也无法创建新用户,那么这个系统就无法被登录和使用,则这个系统就成了名副其实的废物……
我们通过SIM设定后,系统部署中、首次登录、桌面我们都有可用接口,但自动禁用ADMIN是在部署后执行的,而由于我们跳过了系统OOBE过程,则我们又必须在首次登录前就激活ADMIN,所以系统部署中、首次登录、桌面三个接口我们都无法使用。我们需要这样一个时机,即在系统部署完成后(即windeploy.exe运行完毕后,随后详解)ADMIN被禁用后,执行ADMIN的激活,才能达到我们需要的目的。
这样我们就需要更强大的部署过程控制能力,以实现部署后这个程序调用接口(当然,顺道我们也可以实现部署前程序调用接口)。至于详细怎么做,本章第“(三)”部分会详细说明


(二)跳过OOBE过程
这个的实现相对简单,回想上一章我们使用SIM设定OOBE功能模块的时候,OOBE部分有一个属性叫做“SkipMachineOOBE”。
根据说明上说,SkipMachineOOBE是在WIN7测试时才使用的一个参数,在一般的系统安装中是被废弃的属性。但实践证明,在系统部署过程中这个选项可以有效的跳过OOBE过程。实践出真知,无论它本来的设计意图是什么,只要能够实现我们的目的,就是好功能,没有必要过于拘泥于理论。
在SIM中我们将OOBE模块的SkipMachineOOBE设置为“true”

SkipMachineOOBE一旦被设置为“true”,OOBE过程就会被跳过,则OOBE部分的其他设定就没有太多意义了,所以我取消OOBE的其他设定。
保存,系统封装时使用这个xml配置文件,就会跳过系统OOBE过程。
需要注意的是,如果没有自动激活ADMIN且封装前系统内没有余留其他用户,则不要使用此功能。原因在“(一)”中我已经说明


(三)接管部署
系统封装与部署主要就是执行了两个程序:
1、system32\sysprep\sysprep.exe,运行这个程序执行系统封装,我们已经很熟悉这个了
2、system32\oobe\windeploy.exe,系统进入系统部署模式后,自动运行这个程序以完成系统部署中的各项功能
那么,系统是如何知道进入系统部署模式后要运行哪个程序那?或者说,系统是怎么知道要运行windeploy.exe以完成系统部署的?
打开注册表“HKEY_LOCAL_MACHINE\SYSTEM\Setup”,看一下“Setup”键的键值,一般为“oobe\windeploy.exe”,这下我们明白了,是这个键值规定了要执行什么。那么如果我们加入了自己写的部署控制程序,又更改这个键值指向我们的程序,是不是就可以接管部署过程了?答案是“可以”。
为了更好测试,我们以批处理的方式来实现。写如下批处理,名为deploy.cmd:
start /wait %windir%\system32\oobe\windeploy.exe
net user Administrator /Active:yes复制代码即为先调用windeploy.exe完成系统部署,而后使用命令行激活ADMIN账户。
好的,我们来实践一下。首先我们运行sysprep.exe执行系统封装,别忘记加载我们刚才生成的用于跳过OOBE过程的无人值守xml文件,一定要设置封装完毕后退出,以方便其后的设定。(如果xml中还规定了调用其他程序,例如上一章的test.exe,别忘记将test.exe放入所规定的windows文件夹)
封装完毕后,打开注册表编辑器,到“HKEY_LOCAL_MACHINE\SYSTEM\Setup”键下
   
2.png



将setup键值改为“deploy.cmd”
  
3.png


而后将deploy.cmd复制到system32目录下。(setup键值规定的程序是以system32为起始目录的,不可使用绝对路径)
  
4.png


完成后,重启计算机,进入系统部署过程。可以看到我们写的批处理接管了部署过程,由我们的批出里调用windeploy执行部署过程,windeploy执行完毕后还会由命令行自动激活ADMIN。
   
5.png


(自动激活ADMIN的过程太快,没截出图来……)
部署完成后,重启计算机,自动跳过OOBE过程,直接以ADMIN登陆系统
   
6.png


到这里,我们就用最原始的批处理完成了对WIN7部署过程的接管。如果您讨厌批处理的黑框,可以尝试用AU3等写一个类似的程序。
有的朋友可能要问了,那部署前接口怎么实现?这个简单,只要是运行于“start /wait %windir%\system32\oobe\windeploy.exe”之前的不就是部署前调用吗?以后我们可以很方便的在windeploy.exe运行前执行例如驱动解压等过程,就像现在XP部署过程一样。
最基本和最核心的方法我已经带给了大家,大家想开出什么花,由大家自己发挥吧!


到这里,我们实现了自动激活ADMIN、自动跳过OOBE,有效的加快了系统部署过程,减少了不必要的操作。本章中,我们还学习了如何接管部署过程,以及部署前和部署后接口的实现方法。本章虽然比较短,但内容比较多,请大家认真阅读,多加实践。
到这里,《步步为营封 Win7》也要画上句号了,感谢这些天来大家的阅读和支持,衷心的希望大家个个都能成为高手,共同创建最佳的学习环境。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多