封装志 第五章(系统封装).doc

上传人:asd****56 文档编号:70342255 上传时间:2023-01-19 格式:DOC 页数:25 大小:1.61MB
返回 下载 相关 举报
封装志 第五章(系统封装).doc_第1页
第1页 / 共25页
封装志 第五章(系统封装).doc_第2页
第2页 / 共25页
点击查看更多>>
资源描述

《封装志 第五章(系统封装).doc》由会员分享,可在线阅读,更多相关《封装志 第五章(系统封装).doc(25页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第五章 、部署自动化控制(进阶篇)5.1 封装工具自动化运行- g9 S- O1 w5 |$ L8 U说到部署自动化的控制,我们要先聊一聊封装工具的自动化运行。这将有助于我们进一步了解封装工具的各参数设定,以进一步控制部署过程。5.1.1 Windows XP的自动化封装 Z2 E R- D: k4 x9 e7 i. _! h- J& g( / h) j, Y2 2 l: JWindows XP的封装工具Sysprep2.0,除了具有图形界面外,同时还是一个可以在命令提示符环境下运行的命令行工具。本例中我们将Sysprep2.0放置于C:Sysprep文件夹中,要了解Sysprep2.0的命令

2、行参数,可以在输入命令“C:SysprepSysprep.exe /?”查看。 2 d8 g: ) H. ; R(图5-1)! % T% B# i! x8 m2 l7 . m上图是对Sysprep2.0参数的一个基本解释说明,下面我来详细的说明一下各参数的具体用途。-activated一般Windows XP未激活状态下会有30天的宽限期,必须于30天内激活。在运行sysprep.exe时使用-activated参数可以重置这个宽限期,但不要企图使用这个方法躲避正版Windows XP的激活,因为宽限期只允许重置3次。-audit与工厂模式相关的命令,普通用户很少用到,详见Deploy帮助文档

3、。-bmsd. p9 ( b2 ?8 H运行“C:SysprepSysprep.exe -bmsd”会自动根据C:WindowsInf下Machine.inf、Scsi.inf、Pnpscsi.inf 和 Mshdc.inf 的相关内容在Sysprep.inf中创建磁盘控制器的“Plug_and_Play_ID = path_to_device_inf_file”列表,而在随后运行sysprep.exe进行封装时会根据这个列表将系统自带的磁盘控制器驱动集成如系统。这是另一种集成SRS驱动的方法,但由于操作复杂、默认只针对系统自带驱动、更新难度高等原因,逐步被我们在第三章中学习到的方法替代了。可

4、以说,在学习了第三章后,这个参数我们可以不去学习和了解了。9 i& Q6 t+ u+ G7 B: 3 z: $ H! V; R* & G7 M; Q t6 P7 , e* c1 -clean在使用-bmsd生成“Plug_and_Play_ID = path_to_device_inf_file”列表后,使用sysprep.exe完成封装会自动再sysprep.inf中生成一份磁盘控制器清理列表。那么在部署时运行“sysprep.exe -clean”就可以完成对磁盘控制器驱动的清理。而-bmsd参数对我们已经没有什么用处了,则-clean参数也对我们没什么贡献了。& P$ z M; N- S

5、4 d/ f, f* n5 U% h-factory工厂模式,普通用户很少用到,详见Deploy帮助文档。$ s0 L$ Y% n) I3 J1 E: l) q5 g3 G w. u8 t% g-forceshutdown0 e- l, H& T% j M p在sysprep.exe运行完毕后自动关机。# m7 |* n8 |$ r s* L, y, a5 x-mini) A2 . a0 q. 使用最小化模式完成系统部署。 r5 X D- M5 r2 . -noreboot封装完毕后不要重启。. R# x# q- k. m 2 W$ i E$ - G9 E/ k1 n# z/ r -nosid

6、gen3 Y8 a: ?9 O S9 ?( H E7 ?% a) O* ?不生成新的安全标识符(SID),默认情况下,每台计算机有绝对不重复的SID。生成SID会占用额外的系统部署时间,但在安全性要求较高的网络中,如“域”,SID是必须的,而普通用户,不生成SID也罢。-pnp c/ _7 n r# O) ?在最小化系统部署时,启用完整的即插即用设备枚举和安装,有助于硬件设备驱动的搜索和安装,但会一定程度拖慢系统部署速度。; x, k+ |, x5 N1 n, H-quiet运行sysprep.exe但不出现图形界面,自动化运行sysprep.exe时很有用,但注意,这样也会导致某些报错不会显

7、示。-reboot+ l* f0 : _# C0 U+ ) w封装完毕后自动重启。-reseal清楚事件查看器日志并准备交付客户使用,设置下次启动时进入系统部署状态。 T, J( V* c4 Q a# n* d/ b- 您可以根据Sysprep2.0的参数和您系统部署的范围选择适当的参数,参数的选择是灵活的,但也要注意搭配。例如VOL版Windows XP常使用的封装命令:$ J) O5 i, g- I2 FC:SysprepSysprep.exe -quiet -mini -nosidgen -activated -reseal -noreboot5.1.2 Windows 7的自动化封装0

8、 / 2 w+ R# O: V3 eWindows 7的封装工具Sysprep3.14具有更强大的功能,拥有更简洁的图形界面,同时与Sysprep2.0一样也支持命令行模式的调用。要查看Sysprep3.14的都有哪些参数,可运行命令“C:WindowsSystem32Sysprepsysprep.exe /?”2 W, 8 o* v6 b! E% w* X) F ; s- x/ N; q6 / K# d- n ?(图5-2)Sysprep3.14的默认帮助只解释了有哪些参数,并未解释这些参数的实际意义,下面我来讲一下Sysprep3.14各参数代表的含义。 y/ R/ M$ h7 n2 T*

9、 e0 2 e/audit9 z! T; t1 u% v P6 Y! Z S0 ?9 x重新启动计算机进入审核模式。审核模式使您可以将其他驱动程序或应用程序添加到 Windows。您还可以在将 Windows 安装发送给最终用户前对其进行测试。如果指定了无人参与 Windows 安装程序文件,则 Windows 安装程序的审核模式将运行 auditSystem 和 auditUser 配置阶段。: A, N* v L- r6 x- T u; T/generalize8 b8 o s( _0 D准备要作为映像的 Windows 安装。如果指定此选项,所有唯一的系统信息将从 Windows 安装中

10、删除。安全 ID (SID) 重置,所有系统还原点将被清除,事件日志也将被删除。下次计算机启动时,将运行 specialize 配置阶段。将创建新的安全 ID (SID),如果用于 Windows 激活的时钟三次没有被重置,将其重置。2 C- g d8 z# E/oobe重新启动计算机进入“欢迎使用 Windows”模式。“欢迎使用 Windows”允许最终用户自定义其 Windows 操作系统、创建用户帐户、命名计算机和其他任务。在“欢迎使用 Windows”启动前,将立即处理答案文件中 oobeSystem 配置阶段的所有设置。7 Q+ c- f* Z4 L& i- /reboot2 u&

11、 _& S4 r% D( p/ x* x* B重新启动计算机。使用该选项审核计算机并确保首次运行体验正确工作。/shutdown在 sysprep 命令完成运行后关闭计算机。: j1 G! f# W3 U7 y$ : q/quiet, , Q) W6 G F运行 Sysprep 工具而不显示屏幕确认消息。如果自动运行 Sysprep 工具,则使用该选项。3 M B I0 b1 F& q/quit运行指定命令后,关闭 Sysprep 工具。/unattend:answerfile在无人参与安装期间,将答案文件中的设置应用到 Windows。answerfile指定要使用的答案文件的路径和文件名。

12、5.2系统部署过程进阶控制: k2 & K8 z, 回想一下WinXP和Win7的部署过程(参见图4-224-26,以及图4-454-59),我们发现无论是WinXP还是Win7,部署过程中时机最早的外部程序调用接口也要在系统部署即将结束时,且都在系统部署程序搜索与安装驱动后。这样会造成我们对一些程序的调用困难。: A; L6 % J7 d: 9 G7 |一是驱动类。有时我们要为系统集成额外的驱动程序,这些驱动程序经过了压缩打包以节省系统映像体积。某些情况下,我们还要经由特殊的应用程序判断当前的硬件以解压匹配的驱动。驱动包解压后,还要根据解压的路径将驱动所在位置写入注册表,这样在系统部署过程中

13、搜索与安装驱动时就会自动的搜索我们解压的这些增补驱动,从而简化我们手动为系统安装驱动的过程,提高工作效率。这一切必须在系统开始自动搜索与安装驱动前完成,但我们没有这样的外部程序调用接口。二是系统设置类。某些系统设置程序需要在系统部署结束后执行更加稳妥,例如设置IP地址、设置系统还原、设置系统休眠、清理磁盘控制器驱动残留、激活Administrator用户等。同样的,我们也没有此类接口,部署过程中最晚的一个接口也要早于系统部署结束。( R. Z7 y- F9 X m * b W三是某些特殊处理。如为了节省系统映像体积,压缩了Program Files文件夹,压缩了杀毒软件的病毒库,压缩了某些Wi

14、ndows文件夹下的文件等。为了尽可能的减少对系统部署的影响,这些经过压缩的文件夹大多于系统部署开始前即要解压。这样就需要一个系统部署开始前的外部程序调用接口,这个接口与驱动程序解压(也就是刚才所说的第一类)所用的接口是一致的,均是于系统部署开始前,就像驱动类一样,我们没有这样的接口。如上三类应用程序的调用虽然不是我们必须的,但却是我们所需要的,此三类应用程序可以有效的减少系统映像体积、简化驱动安装过程、增强对系统各设置的自动化设定。好吧,既然我们需要,那我们就来想办法实现它们。简而言之,就是实现部署开始前和部署结束后的外部程序调用接口。下文中如无特别指出,则假设系统盘(%SystemDriv

15、e%)为C盘。+ N+ H4 A* . K w: r6 E+ x+ q5.2.1 接管系统部署过程 w/ L; j2 ? y, g/ F& 7 J. w- y系统封装是通过Sysprep程序来完成的(WinXP是Sysprep2.0,Win7是Sysprep3.14),那系统部署过程是由哪个程序完成了?Sysprep程序又是怎么告诉系统调用哪个程序来完成系统部署过程的呢?在系统封装完毕后,通过对注册表项目的观察,我们发现了一系列的注册比键值的变化,其中引起我们注意的是HKEY_LOCAL_MACHINESYSTEMSetup键下Cmdline键值。一般情况下,WinXP封装结束后此键的数据为“

16、setup.exe -newsetup -mini”,Win7封装结束后此键的数据为“oobewindeploy.exe”。另外,通过对部署过程后台程序的观察,发现WinXP的部署过程是由C:WindowsSystem32setup.exe执行的,而Win7的部署过程是由C:WindowsSystem32Oobewindeploy.exe执行的。整理一下这两项观察的结果,我们总结出如下结论:(1)无论是WinXP还是Win7,都是由HKEY_LOCAL_MACHINESYSTEMSetup键下Cmdline键值规定使用哪个程序执行系统部署。(2)无论是WinXP还是Win7,HKEY_LOCA

17、L_MACHINESYSTEMSetup键下Cmdline键值是以C:WindowsSystem32为相对目录的。即Cmdline键值所规定程序的上层目录为C:WindowsSystem32。(3)WinXP一般情况下使用C:WindowsSystem32setup.exe以“-newsetup -mini”参数执行系统部署。Win7一般情况下使用C:WindowsSystem32Oobewindeploy.exe执行系统部署。) M% J; Z- N8 f2 2 N那么我们可以自己写一个小程序,名为“Deploy.exe”,将Deploy.exe复制到C:WindowsSystem32下。在

18、封装结束后,改写Cmdline键值为“Deploy.exe”,这样部署过程就会调用我们的Deploy.exe来执行。Deploy.exe先调用部署前要调用的外部程序,再调用系统部署程序(WinXP的Setup.exe,Win7的windeploy.exe),最后调用部署后要调用的外部程序。这样就成功实现了系统部署前与系统部署后外部程序调用接口,且不影响系统部署过程!这样,算上之前在第四章实现的几个基本外部程序调用接口,我们共有了5个接口:系统部署开始前调用接口、系统部署即将结束时调用接口、系统部署结束后调用接口、首次登录系统调用接口、进入桌面调用接口。5.2.2 五大接口在Windows XP

19、中的实现; a b) b8 p f1 5 x/ I首先我们准备好5个接口测试程序:Test_1.exe:部署前调用;1 H- |2 I8 N / V- 4 iTest_2.exe:部署即将结束时调用;7 V( d5 U2 b) xTest_3.exe:部署后调用;7 I: c7 q2 p9 I ( y. V4 j6 n2 BTest_4.exe:首次登录调用;& ?1 Q% S9 a# _; $ yTest_5.exe:进桌面调用。# h& S, H- r: A/ S% 9 W P全部放置于一个名为Test的文件夹中。6 l P Y* s, l I- k- q( R, _. g- D9 Z$

20、U e然后我们用AU3写一个部署接管程序,命名为Deploy_WinXP.au3,编译后名为Deploy_WinXP.exe。Deploy_WinXP.au3的内容如下:, w, * 7 x$ |$ X1 _Deploy_WinXP_Main()2 Exit34 Func _Deploy_WinXP_Main()5 ;通过读取系统变量获取系统盘盘符6 Local $SystemDrive=EnvGet(SystemDrive)7 ;部署前调用Test_1.exe8 RunWait($SystemDrive&TestTest_1.exe)9 ;调用Setup.exe完成系统部署10 RunWai

21、t($SystemDrive&WindowsSystem32Setup.exe -newsetup -mini)11 ;部署后调用Test_3.exe12 RunWait($SystemDrive&TestTest_3.exe)13 EndFunc复制代码; P. J& A/ e/ e& : N, 1 j l( D b7 P最后别忘记在sysprep.inf的GuiRunOnce段中添加对Test_4.exe的调用。14 GuiRunOnce15 Command0=C:TestTest_4.exe复制代码准备工作做好后,按照如下步骤做:(假设系统盘为C盘)7 k0 ( A# y. a b: y

22、 Z(1)按照我们在前几章中讲的方法封装Windows XP,注意,选择封装后退出,不要选择封装后重启或关机,因为我们还有些调整要做。! g$ S! R; D- O5 o1 8 U(2)复制Deploy_WinXP.exe到C:WindowsSystem32。(3)复制Test文件夹复制到C:Test。* B, s W W; k) Q0 V9 V. (4)修改HKEY_LOCAL_MACHINESYSTEMSetup下Cmdline,将其键值改为Deploy_WinXP.exe。; |: N* % X I. e ; n C/ R& j: |5 l7 k(图5-3)(5)在HKEY_LOCAL_

23、MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunOnce下新建一个名为Test_2的字符串类型数值,数值数据为:C:TestTest_2.exe。% n8 J: J2 o / G+ f; + S( (图5-4) q ?3 w0 A 6 4 S8 d( / ?(6)在HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun下新建一个名为Test_5的字符串型数值,数值数据位:C:TestTest_5.exe9 * J+ # D0 Y3 c- y (图5-5)小结一下:(0)通过修改Cmd

24、line键的数值,使用Deploy_WinXP.exe接管部署过程;8 m1 W# K$ x n: K(1)通过Deploy_WinXP.exe在部署前调用Test_1.exe;) Z/ l. S( A7 Z m L0 X: M) v4 (2)通过新建RunOnce键的数值,在部署即将结束时调用Test_2.exe;5 H- j% C- Q. $ F4 x( x9 K5 x! E(3)通过Deploy_WinXP.exe在部署后调用Test_2.exe;; w. E- K# - F0 S/ h(4)通过修改Sysprep.inf的GuiRunOnce段,在首次登录时调用Test_4.exe;(

25、5)通过新建Run键的数值,在进入桌面时调用Test_5.exe。1 m8 q3 H# Y, d/ z这样我们就基本实现了接管部署过程,并实现了五大外部程序调用接口。3 E! Z! 4 b9 K- c8 0 U7 i! x; s6 $ B, o) Z) ! ? J测试一下经过修改后的系统部署过程:6 K+ j X- I5 G3 N# ) J部署前调用Test_1.exe(由于setup.exe未运行,所以无背景)% l5 Z( N! v0 p8 2 y# r) q / C* O$ c D6 f(图5-6)9 c F, v l2 o部署即将结束时调用Test_2.exe (图5-7)3 8 P+

26、 D+ o5 m: m1 X. C. P( P6 N部署结束后调用Test_3.exe(由于setup.exe已经运行结束,所以无背景) a9 F) r: A, u) m; b (图5-8)# D6 y5 a3 k L5 x首次登录调用Test_4.exe4 E/ f k5 B# G W9 x2 q * F4 j$ r0 n5 W/ H(图5-9)进入桌面调用Test_5.exe; O3 l% C! e* h7 V# b% s$ F1 D$ z当您实际使用时,可以将这5个调用测试程序换成您所需要的其他程序,这样就可以实现在部署过程中的适当时机调用合适的应用程序了。& M! C5 v F 3 w

27、# f/ j f% M* x0 c0 C% b) # Windows XP的实现了,我们再来看看Windows 7的。 B9 k+ a / U- L w, G- c+ J* ?5.2.3五大接口在Windows 7中的实现总的来说,Windows 7的五大接口比Windows XP的更好实现,基本步骤也类似。1 v5 p6 ! q0 p8 j9 h首先我们准备好5个接口测试程序: j! E4 t! ?$ v2 NTest_1.exe:部署前调用;Test_2.exe:部署即将结束时调用;Test_3.exe:部署后调用;Test_4.exe:首次登录调用;0 S9 k) T6 J9 g1 cT

28、est_5.exe:进桌面调用。* H N& l/ W/ D4 F1 q7 G全部放置于一个名为Test的文件夹中。) E* R: 5 ( h& 6 m0 S) . n, U然后我们用AU3写一个部署接管程序,命名为Deploy_Win7.au3,编译后名为Deploy_Win7.exe。Deploy_Win7.au3的内容如下:16 _Deploy_Win7_Main()17 Exit1819 Func _Deploy_Win7_Main()20 ;通过读取系统变量获取系统盘盘符21 Local $SystemDrive=EnvGet(SystemDrive)22 ;部署前调用Test_1.

29、exe23 RunWait($SystemDrive&TestTest_1.exe)24 ;调用Setup.exe完成系统部署25 RunWait($SystemDrive&WindowsSystem32OobeWinDeploy.exe)26 ;部署后调用Test_3.exe27 RunWait($SystemDrive&TestTest_3.exe)28 EndFunc复制代码# 6 A- x$ 5 $ s V最后我们要稍稍修改一下在4.2节中创建的Untitled.xml:/ R6 D# a/ S! U部署即将结束时要调用的程序改为“%SystemDrive%TestTest_2.exe

30、”;8 u( R- k8 R; R5 % v+ J首次登录要调用的程序改为“%SystemDrive%TestTest_4.exe”;$ p5 x4 Y4 2 v; o进桌面要调用的程序改为“%SystemDrive%TestTest_5.exe”。/ O4 Q- q x+ m6 修改后的Untitled.xml全文如下:29 30 31 32 33 34 35 InDeploy36 137 %SystemDrive%TestTest_2.exe38 39 40 41 42 43 44 45 46 %SystemDrive%TestTest_4.exe47 FirstLogon48 149 5

31、0 51 52 53 %SystemDrive%TestTest_5.exe54 GoToDesktop55 156 57 58 59 true60 true61 Work62 163 true64 65 66 67 68 复制代码4 B, b) I 2 d& l n c 4 N0 a) f7 保存于D:Untitled.xml) Z9 J1 D) k: F. o3 u+ J+ j2 V( k5 c+ 7 P# F5 c7 l/ Q准备工作做好后,按照如下步骤做:(假设系统盘为C盘)/ b% W1 d# J) 8 (1)运行命令:C:WindowsSystem32SysprepSysprep.

32、exe /unattend:D:Untitled.xml加载D:Untitled.xml来封装Windows 7。注意,选择封装后退出,不要选择封装后重启或关机,因为我们还有些调整要做。2 j/ F; c, y1 d7 H J7 g8 p(2)复制Deploy_Win7.exe到C:WindowsSystem32。(3)复制Test文件夹复制到C:Test。(4)修改HKEY_LOCAL_MACHINESYSTEMSetup下Cmdline,将其键值改为Deploy_Win7.exe。0 ; | x; g4 g (图5-11)$ K9 D6 z! m, p: Q. C m+ : G- v. X

33、4 o/ K2 小结一下:(0)通过修改Cmdline键的数值,使用Deploy_Win7.exe接管部署过程;(1)通过Deploy_Win7.exe在部署前调用Test_1.exe; |- b3 g- v4 |7 k(2)通过Untitled.xml的设置,在部署即将结束时调用Test_2.exe;2 D: k+ t% R/ Q8 v, n& e% G3 U(3)通过Deploy_Win7.exe在部署后调用Test_2.exe;4 k/ B7 * x/ Y# p* y1 f(4)通过Untitled.xml的设置,在首次登录时调用Test_4.exe;(5)通过Untitled.xml的

34、设置,在进入桌面时调用Test_5.exe。这样我们就基本实现了接管部署过程,并实现了五大外部程序调用接口。测试一下经过修改后的系统部署过程:) G8 B& z J% d! 部署前调用Test_1.exe (图5-12)* h8 P# B$ J6 U4 |: g6 B7 / p9 K! d0 % w% 0 z部署即将结束时调用Test_2.exe (图5-13) g) r! Y P6 v7 ?部署结束后调用Test_3.exe (图5-14)1 i1 o; f # T8 W# ) v! M- 1 n l首次登录调用Test_4.exe ! o2 S + G0 C) G6 T- l(图5-15)

35、进入桌面调用Test_5.exe6 O1 O0 P. . D7 p( e (图5-16)5 S; i/ 0 f9 P0 t O- 8 i& z2 t当您实际使用时,可以将这5个调用测试程序换成您所需要的其他程序,这样就可以实现在部署过程中的适当时机调用合适的应用程序了。* a- C o6 c7 O8 A# z; h! l! v h1 M3 F. R$ j6 i+ j. n* _, Z- - Z这样,我们也完整的实现了Windows 7的五大接口!5.3 本章小结2 l- E; y7 H ! q3 z9 F- m2 M9 q U6 R s* a. q本章主要学习了两个方面的内容,一是使用参数控制系统封装,这使我们进一步了解了系统封装的可设置项目;二是学习了如何为系统部署过程添加外部程序接口,这更便于我们调用第三方软件,丰富部署过程。. c: Z! B% o2 d7 |透过本章的学习,我们进一步驾驭了系统封装与部署,更多的外部接口为我们提供了足够的想象力,至于怎么发挥,靠您多多实践啦! q: ! p. h+

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com