封装志1-3章

封装志1-3章
封装志1-3章

封装志

目录

序言………………………………………………………………………

第1章初识封装与部署技术…………………………………………

第2章硬件设备驱动的处理…………………………………………

第3章磁盘控制器驱动的制作与集成……………………………

第4章基本部署自动化控制…………………………………………

第5章进阶部署自动化控制…………………………………………

第6章驱动综合包的制作与集成……………………………………

第7章手动封装与部署控制实例……………………………………

第8章自动封装与部署控制实例……………………………………

0. 序言

虽然是序言,但还是希望大家能认真的读一下。

0.1 一份担忧

统封装与部署技术从被搬上台面到现在也有 5 到7 年的时间了,从最初是

少数高人手中的玩具,逐渐的变成大量老菜鸟津津乐道的话题,再到现在一个普通IT 人员都可以使用封装辅助工具独立的完成系统封装与部署。这项技术在飞速的发展着,也被广大IT 人员使用着,在看到此项技术被广泛应用的同时,一份前所未有的担忧也伴随了我将近3年的时光。

自动化封装辅助工具的出现,虽然简化了操作、拓展了适用范围,但是很多

技术也被逐渐的隐藏了起来。很多功能不再需要操作者手动修改注册表、亲手编写批处理了,这些功能变成了只需要选中一个选项、单击一个按钮就可以完成的事情。诚然,这令系统封装变的史无前例的简单,有效的降低了工作者所需的技术门槛,但这也使得系统封装与部署技术的真正技术内幕变得只有越来越少的人

知道,太多的所谓“能独立封装系统的人”只具备浮于表面的技术水平,一旦遇

到较为纠结的问题,一旦遇到较为特殊的情况,一律无法解决,缺乏解决问题的

技术能力和基本素养。

自动化封装辅助工具的出现也带来了其他附带的问题。由于很多操作变得简

单化,正如上文已述的,很少需要用到手动修改注册表,也很少用到亲手编写批

处理解决问题,甚至有些人连打开控制面板点选某个选项都懒得亲手做,所有功

能一律由自动化封装辅助工具包办。而恰恰是这些操作,在潜移默化的培养着一

个IT 从业者的基本技术素养,很多技术要靠实践的磨练。

但是说到这里,并不是说我们要反对自动化封装辅助工具。自动化封装辅助

工具在推广自动化系统封装与快速部署技术的过程中功不可没,没有它,现在系

统封装部署技术还是少部分所谓高人手中赚钱的工具。自动化封装辅助工具有效

的让更多新人入门,也让更多的老手节省了时间和精力。拿来主义讲,我们要善

于拿来精华,去除糟粕。我们在享受“一键封装”的过程中,必须还要能摸清这门技术。系统封装和部署技术不是你家的电视机、空调和洗衣机,按几个按钮什么都

解决。我们不需要去了解这些电器的内部结构,是因为它们足够稳定,而且有专

门的修理人员。但操作系统本身就存在有各种可能性,程序本身就可能存在各种

BUG,作为IT 业者的我们,一旦在使用这门技术时发现和遇到问题,也只能靠

我们自己来“修理”。特别是系统方面的问题,很多问题不只有其表象上的问题,

我们要善于通过现象看本质,而不能浮于“什么怎么样,应该怎么办”上,电脑

中没有死的规则,一个问题可以有N 种解决途径,同样一个问题也需要我们从

N 个方面去分析和理解。知其然且知其所以然,这样才能应用一项技术。只知其

然而不知其所以然的,只能说自己会用,但永远不能说自己可以“应用”!

说到这里,如果没有系统封装与部署技术的知识撑腰,如果您目前仅仅限于

会用封装辅助工具,那你敢说自己会封装了吗?进一步说,你还敢封装吗?

0.2 我不会讲的和我会讲的

在本书中我不会讲如下三条内容:

1、怎么打开注册表、怎么打开设备管理器、怎么写批处理、怎么改文件后

缀名以及怎么按开机键打开电脑等等。这是一个只要想搞搞电脑技术的人所必备

的基本素质,我想我不需要就这些基本的小事还婆婆妈妈的长篇大论。

2、怎么分区、怎么安装系统、某某分区工具怎么用、虚拟机是什么等等。

软件的使用方法,只有多尝试、多实践,不要以为走弯路是耽误你实践,没有白

走的路,多走的这些路正是你磨练的过程。当然我会和大家共同探讨使用软件的

技巧和经验,但至于怎么做这些基本的事情还烦请自行研究。

3、某某软件怎么找、某某工具去哪下载等等。互联网的宽广程度超出我们

的想象,只要不是特别稀缺的资源,大多数资源均可从网络上找到。只要不是有

意使用的软件的缩略名,根据软件的全称95%以上的软件都可以在网络上

DOWN 到。只是看你用心不用心、懒不懒的问题。

如果遇到如上问题怎么办?善用百度和谷歌,顺道学会用迅雷。

在本书中我会讲如下内容:1、尽可能全面的讲解系统封装与部署技术的各个方面,从最基本的知识到

进阶的知识,从拆分的实例到完整的系统封装实例。尽我所能的从多方面、多角

度分析问题,循序渐进、步步为营的解决问题。

2、精讲常用的、重要的知识,并拓展这些知识。略讲不常用的、冷门的知

识,减少视听的混淆。有些软件我们可能只使用它20%的功能,那我会着重分

析这20%,至于其他80%中很多功能我们一辈子都用不上一次,有必要用大篇

幅讲讲吗?

3、针对大家最感兴趣的问题进行讲解,如手动系统封装与部署控制、SRS

驱动的收集原理、综合驱动包的制作方法等。

本书不可能涵盖所有关于封装与部署的知识,这些知识仅微软官方提供的资

料就有NNN 页,如果您有兴趣可以查阅这些资料,而本书没必要把这些生涩的

知识复制粘贴一下来浪费纸张。但本书中会精讲我们最常用、最有用的部分,让

大家明白原理,并能利用这些原理更好的完善自身的技术。

0.3 阅读本书所需要的

1、这不是一本零起步教程,这是实话实说。我不想为本书扣上“零起步教

程”的噱头,骗取更多新手的血汗钱,我个人更推荐有一定基础的人来阅读本书。

当然,这不是对新手的不屑,而是一份诚恳的建议。系统封装与部署技术不是一

项单一的技术,更多层面上讲,这是一项复合型的技术。系统封装与部署技术设

计:系统、驱动、软件、硬件、优化、编程等多方面技术,且对这些技术的综合

应用能力有一定的要求。但如果您是一位很有毅力的新手,那您可以忽略这一条。

2、绝对的耐心和信心。系统封装与部署技术虽然是一项综合性很高的技术,

但对每项技术的深度要求都不算高,所以很适宜知识面广的IT 业者来学习。虽

然对每项技术的要求都不高,然而由于综合性强、涉及面广,出现各种问题的几

率大大的提高了。随时都有可能出现“你不注意的某个细节成为了你失败的关键”

的情况,设置有时一个简单的问题需要几十次测试和好几天的时间。这种时候,

唯一能支持你的只有你的耐心和信心!

3、优秀的品质和心态。学习任何技术都要有良好的品质和心态,态度能决定你的一切。学习一项新技术是在头脑中构建新的知识架构的过程,甚至需要拆

毁之前已有的知识架构来构建新的,这是一个残酷的过程。摆正自己的心态,拥

有百折不挠的精神和不怕失败的勇气,这是学好一样新知识的重中之重。

4、稍微有那么一点的编程知识。本书中某些自动化的实现我将用AutoIt v3

(AU3)来实现。如果您不会编程,建议您学一些基础,特别是经常有自己想法

的朋友,只有编程能更好的实现你的想法,不要让灵感流逝。如果您会编程,但

不会AU3,这个不要紧,只要是编程语言都是相通的,算法是一致的,且AU3

属于语法宽松的脚本语言,我会对程序部分加详细的注解以方便您阅读。如果您

会AU3,那太好了,相信本书能给您提供更多的思路。

本书旨在详细讲述系统封装与部署技术,为了更多的人了解这项技术,也为

了更多人来应用并推广这项技术。系统封装与部署技术极大的提高了IT 业者的

工作效率,有效的节省了无谓的时间与精力的消耗。本书将同您一起进入这项技

术的殿堂,我将与您一起通过随后8章的学习领略这项技术的魅力。

本书将以微软最稳定成熟的Windows XP和最新的Windows 7为蓝本来

共同研究封装与部署技术。Windows 2000 和Windows Server 2003所使用

的方法与Windows XP类似,Windows Vista 和Windows Server 2008 所使

用的方法与Windows 7基本相同,这里不再赘述。

第1章、初识封装与部署技术

讲述此项技术的基本原理,展示WinXP和Win7的基本封装与部署过程。

第2章、硬件设备驱动的处理

封装前对硬件设备驱动的卸载以及对HAL 的处理等。

第3章、磁盘控制器驱动的制作与集成

讲述SRS驱动的制作过程与集成方法,以及所要注意的问题。

第4章、基本部署自动化控制

使用微软提供的无人值守工具使部署过程自动化。

第5章、进阶部署自动化控制

发挥我们的才能,进一步控制系统部署过程,使更方便。

第6章、驱动综合包的制作与集成

驱动综合包的制作方法和集成方式。

第7章、手动封装与部署控制实例

完全手动的封装系统,并用手动控制部署过程。

第8章、自动封装与部署控制实例

使用ES3 封装系统,完全自动化的系统部署控制。

第1 章、初识封装与部署技术

1.1 封装与部署技术要知道的

首先我们来了解一些基本知识和问题,虽然这有些枯燥,但基本概念可以让

我们掌握事物的根本,同时,摆正对事物的认识,可以进一步的帮我们理解知识。

1.1.1 什么是系统封装与部署技术

系统封装与部署技术是由微软官方提供的,是一种将源计算机中的Windows 操

作系统经过封装后,使用磁盘映像工具或文件映像工具制作成系统映像,再通过

各种中间介质传输到一台或多台目标计算机上,并部署到目标计算机中的技术。

这至少让我们知道了三个概念和一个流程:

三个概念:

(1)系统封装。还原系统的某些设置到初始状态,将系统调整为准备部署

的状态。就像你在家里打包你的行李,准备带这些行李外出。

(2)系统映像与转移。使用如Ghost、ImageX 等把当前系统做成系统映

像,将系统映像通过CD、DVD、USB移动存储设备、网络等介质传送到目标计

算机中。换而言之,和谐号也好,波音747 也好,只要是能把你从家带到目的

地的方法均可。

(3)系统部署。系统进入部署状态、适应新计算机的硬件环境、重新装载

驱动、调整系统设置等,最后交付给你一个和源计算机中相似的全新Windows

系统环境。就像你到达目的地后,打开你的行李箱,把上衣、裤子、文件、PDA、

TT 拿出来准备随时使用。

一个流程:

源计算机中的Windows 操作系统-->系统封装-->映像工具制作系统映像

-->传输介质-->目标计算机-->映像工具恢复系统映像-->系统部署-->目标计

算机中的全新Windows 操作系统。

说到这里,相信您对系统封装与部署技术有了一个大致的了解。虽然封装与

部署会还原部分系统设置到初始状态,但系统内所安装的补丁、软件以及所做的

大多数优化都是不变的。这也就是说,你部署的不单单是一个操作系统,而是一个经过调整和设置的、包含各种常用硬件驱动和应用软件的操作系统!可以想象

只需要按一个按钮就完成这一切吗?这也正是封装与部署技术备受青睐的优势!

1.1.2封装与部署≠克隆

这是两个几乎不沾边的概念,但时至今日仍有人将系统封装与部署说成是克

隆系统,甚至直接说成是Ghost 系统。可能在早期的确有人尝试将系统直接使

用Ghost 克隆,但这种操作与系统封装部署技术基本不沾边。这里我们讨论两

个大家比较关心的问题:

(1)为什么使用Ghost?

Ghost 只是一个磁盘映像工具,正如前文中叙述的,其作用是将已经封装

的系统做成系统映像,并将映像恢复到目标计算机,充其量只做了个在系统封装

后打包和在系统部署前拆包的工作。如果你愿意,可以使用任何映像工具做这个

操作,不一定使用Ghost。

而至于我们大家为什么都用Ghost,一是因为它是老牌软件,二是因为我们

这么多年都用习惯了,三是因为能够使用Ghost 已经成为了一个IT 工作人员必

备的技能。最重要的一点,Ghost可以在纯DOS环境下运作,就某些“恶劣的”

计算机环境而言,DOS比Windows PE 更具有优势。

所以,所谓“克隆版”或“Ghost版”的说法仅仅是某些不了解技术真像的

人的一种偏颇的叫法,凡是这样说的人,大多没有触及封装与部署技术的深层。

(2)封装与部署技术的稳定性差?

在1.1.1节的第一句话我就说过,封装与部署技术是微软官方提供的,系统

封装与部署的核心操作都是由微软官方软件来执行的。虽然微软每个月的漏洞让

我们比较心烦,但是我相信你我都不会去怀疑微软自家的技术,特别是微软自家

针对自己核心产品Windows 的技术。所以,就封装与部署技术本身的稳定性而

言,是基本不需要怀疑的。

但为什么仍有人认为“克隆版”的稳定性比较差呢?这只是通过表象看的

问题罢了,不是事情的真相。为了让系统封装更智能,为了让系统部署的适用范

围更广,广大IT 工作者为系统封装与部署技术注入了更多的技术拓展,这在很

大程度上提高了系统封装与部署的适用性,但同时也带来了部分小问题,毕竟大家并不是微软。例如增加磁盘控制器驱动不当会宕机,系统调整不当会带来兼容

性的降低等,但这些不稳定因素都是人为产生的,不是由系统封装与部署技术本

身产生的。

1.1.3封装与部署≠盗版

盗版是个敏感话题,但我们仍要说一说。

前文多次提到封装与部署技术即是微软自家的技术,因其减少了无谓的劳动

和人力物力的损耗、有效的提高了工作效率等诸多优点,被很多IT业者所青睐。

这项技术的优势是显而易见的,但正是它的优势引得了个别人的歪念头。

由于国内大多数人软件正版意识淡薄,而正版Windows 操作系统的价格又

较为昂贵,个别人将Windows 以特殊方法激活后以封装方式做成盗版

Windows 光盘,而后部署到盗版购买者的计算机上。由于封装与部署技术的便

利性,几乎按一个按钮就可以完成包括系统、补丁、驱动、软件等的安装,没有

太多计算机应用水平的盗版购买者也可以轻易的进行安装,所以盗版光盘绝大多

数使用了封装与部署技术。

但这恰恰反应了系统封装与部署技术的便利性和优越性。而如果非要把封装

与部署技术和盗版挂钩,真是过于牵强了。就像我是卖菜刀的,客户用刀切菜还

是用刀伤人,和我有关吗?封装与部署技术完全可以用于正版,有些人非要把它

用于盗版就把盗版和封装与部署技术挂钩合理吗?

1.1.4 封装辅助工具是什么?

封装与部署工具是微软的,那我们现在在网络间常见的各种“系统封装工具”

又是什么?

封装不单单是运行一下微软的工作就可以,封装前和封装后我们都要做一些

手动的操作,如打补丁、卸载驱动、加入OEM信息等。而部署过程也不单单是

只运作微软的部署流程就可以,如果要做的更方便我们就要加入其他的各种软件

并做相应的设置。以前这些事情都是靠手工作的,亲手改注册表、亲手写批处理,

我个人到现在还很怀念那个时代。但现在,时代变了。为了降低操作的复杂性,同时为了降低封装与部署技术的门槛,网络上的部

分IT 高手开始编写自动化程序来替代这些繁琐的手工操作,这些自动化操作整

合起来,就成为了系统封装辅助工具,其中也不乏高智能化高人性化的经典之作。

确切的说,自动化封装辅助工具还包括了对系统部署过程的拓展和自动化控制。

但无论封装辅助工具怎么样,绝大多数仍旧使用了微软自家的封装与部署工具作

为核心,封装辅助工具所做的仅仅是替代了以往麻烦的手工操作罢了,所以并没

有改变系统封装与部署的本质。{. F, }8 c# }4 U7 u5 h

综上所述,我们要驾驭系统封装与部署技术,就必须看一看最原始的系统封

装与部署是怎么样的,或者说看一看使用微软官方的工具能做到什么样的效果。

了解基础是我们掌握本质的关键,下面我将分Windows XP和Windows 7两

方面给大家展示一下何为封装与部署。

1.2 Windows XP 基本封装方法$ }1 u7 I0 y. T" O1 W

3 W2 e3 C+ r

4 ?& ^/ Y7 \

Windows XP虽然年迈,但不可否认它是微软的经典之作。Windows XP

从2001年发布到现在已经经历了各种磨练,各方面扎实稳定,便于我们研究。

且Windows 之间的技术大多是通用的,所以研究Windows XP不只是研究

Windows XP而已。

1.2.1 安装Windows XP

要封装Windows XP(一下简称XP或WinXP),必须先安装XP。XP安

装并不是个难事,所以这里不会赘述,但有两个问题我想和大家探讨一下。

1、安装到C 盘,为什么?, N0 K1 d3 n- A% `

从我们开始研究封装一来,见到的各种优秀作品都是C 盘的系统,确切的

说是用第一硬盘第一分区的系统来进行封装操作并部署,为什么?这个问题需要

我们从XP的启动来从根说起。

计算机启动并将控制权交给XP是一个这样的过程:(1)计算机启动,BIOS和CMOS管理各硬件,自检;

(2)自检结束,检测硬盘中的活动分区;

(3)加载活动分区中的NTLDR,这个包含NTLDR 的活动分区我们为它命

名为【启动分区】;

(4)启动分区中的NTLDR 通过BOOT.INI文件寻找XP系统文件夹(默

认为Windows 文件夹)所在分区,这个被BOOT.INI 指向的包含Windows 文

件夹的分区我们为它命名为【系统分区】;

(5)加载Windows 文件夹中的系统文件启动XP,计算机控制权由BIOS

和CMOS 交给XP,XP启动完毕。

简单说,流程为:计算机启动-->BIOS和CMOS管理-->找到硬盘上的启

动分区-->加载【启动分区】中的NTLDR -->NTLDR 通过BOOT.INI 寻找【系

统分区】-->启动系统分区中的XP-->XP启动完毕。

一般来说只有主分区可以做活动分区,而活动分区一般为【启动分区】。由

于【启动分区】中的NTLDR 可以依靠BOOT.INI 来寻找【系统分区】的位置,

所以系统分区不一定必须是主分区,也可以是逻辑分区。而我们平时常见的“C

盘”,则是一个特殊的情况,即C 盘是主分区,同时也是【启动分区】和【系

统分区】。

“C 盘”的特殊情况有利于我们做封装和部署操作,这是因为一般情况下我

们只转移一个分区的映像。假设当前C 盘是【启动分区】,我们将系统安装在D

盘里,那么D盘是【系统分区】,则NTLDR 和BOOT.INI 在C 盘里,而系统

则在D盘里。我们对D盘执行封装操作后做成系统映像,但这个系统映像里并

不包括NTLDR 和BOOT.INI!那么如果我们将这个系统映像恢复到目标计算机,

那么没有NTLDR 和BOOT.INI 的计算机如何启动?

所以,一般情况下,建议将 C 盘设置为主分区,并用 C 盘同时做【启动分

区】和【系统分区】。这便于我们做封装操作,简化不必要的步骤。

(图1-1)

2、FAT32还是NTFS?

FAT32和NTFS是两种不同的磁盘分区格式,FAT32主要用于Windows

95/98/Me,而NTFS是跟随Windows 2000一起出现在大众视野里的,随后

NTFS成为了Windows XP和Windows Server 2003的推荐磁盘格式,而当前

NTFS成为了Windows Vista、Windows Server 2008、Windows 7安装时唯

一可用的分区格式。

或许是当年Windows 2000时硬件配置没有那么高,Windows 2000给大

家的体验不是那么舒畅等原因,NTFS在当时被冠上了“慢”的恶名。FAT32对

比NTFS可能在个别方面存在优势,但无论是NTFS的稳定性、安全性还是NTFS

文件更好的支持性上讲,都超过了古老的FAT32格式。不要再去怀疑NTFS,

如果它真的有问题,微软还会把它作为Windows 6.x一代(包括Windows

Vista/2008/7,Windows 7虽有7之名,但版本号依然属于6)唯一可选的分

区格式吗?另外,FAT32与NTFS在使用Ghost 压缩时,可能FAT32会压缩的更小一些,但我相信您不会为了这10M 左右的空间去丢弃系统分区的稳定性和安全性

吧?

我个人推荐使用NTFS格式作为系统分区。至于NTFS和FAT32的更多知

识,建议您请教谷歌和百度。

(图1-2)

3、是“快”还是正常?

在格式化分区时有是否使用“快”的可选项目(如图1-2)。到底这个“快”

是什么意思,可能还有朋友不明白。

Windows 在格式化分区时有两种可选方式。正常情况下,在格式化分区时

会搜索此分区所在磁盘扇区可能存在的错误,并尝试修复或避开这些错误,但这

种模式下格式化会比较慢,特别是对于较大的分区时。而“快”则不检查这些,直接执行格式化操作。对于使用了一段时间的硬盘,建议使用一般格式化方式,

而对于新和较新的硬盘则推荐使用“快”模式。

那么系统封装我们要用哪种方法格式化?这个没有绝对的规定,但根据经验,

建议您使用普通格式化方式,这样在使用Ghost 备份分区所在扇区时不容易出

现不必要的错误。当然,这只是建议,没有迹象表明这样做一定能好或不这样做

一定会坏,以防万一而已。

1.2.2 Windows XP的封装工具

Windows XP自带的封装工具在哪?这个需要到Windows XP原版光盘上

寻找,注意,特别指出是原版光盘,各种改版可能都会删除这个文件。

打开Windows XP原版光盘的如下目录(假设光驱盘符是D):

D:\SUPPORT\TOOLS

5 F* P

找到DEPLOY.CAB文件包,复制到一个你好记的地方,如E 盘,解压缩,

得到Deploy 文件夹以及其内的文件。

(图1-4)

Deploy 工具包中包括了XP封装所需要的一切东西,包括封装程序、可能

用到的分区调整和格式化工具、详细的文档和说明。其中我们常用的有:

(1)sysprep.exe、setupcl.exe 和factory.exe,它们是相互依存的,且大

多数时候我们用不到factory.exe(工厂模式),只需要sysprep.exe和

setupcl.exe就可以了,它们是主封装程序;

(2)setupmgr.exe,用它来生成一个无人值守文件,用来自动应答部署过

程中的各种人工选择或设定的选项,这个工具下一章中将详细介绍。且大多数时

候我们只会使用一个差不多固定的sysprep.inf(自动应答文件),不会多次使用setupmgr.exe来生成它。

(3)deploy.chm,这是神一样的帮助文档,几乎包含了XP封装的所有相

关技术,如果您想多一点了解XP的封装与部署技术,建议全文阅读这个文档。

除了这几个常用工具和文档之外,其他的都是做什么用的,建议读一下

deploy.chm,都有说明。对于这些出场率很低的工具,我不会花太多的篇幅来

浪费纸张,有需要读一下deploy.chm,什么都有,真的。有了Deploy 工具包,我们就可以做封装操作了。按照如下步骤:

(1)在C 盘创建Sysprep 文件夹,这个是必须的,规定要这样做,且这个

文件夹会在系统部署结束后自动化的删除,无需人为操作,十分方便。

(2)将sysprep.exe、setupcl.exe复制到C:\Sysprep,如果你对工厂模

式有兴趣请同时将factory.exe也复制过去,但大多数时候我们只需要

sysprep.exe和setupcl.exe就足够了。

(图1-5)

做好了准备,在下一节里我将与您一起体验一下XP的封装技术。

1.2.3 Windows XP 的基本封装流程

运行C:\Sysprep\ sysprep.exe,弹出下图:&

这只是一个提示,单击“确定”按钮,出现如下图界面,这是系统准备工具

2.0(Sysprep v2.0)的主界面。

(图1-7)其中“工厂”模式和“审核”模式都不是我们需要的,我们要为最终用户提供可用的系统映像,所以“重新封装”是我们要做的。但不着急,我们来看一下

下面的几个选项:

(1)不重制激活的宽限期

XP默认有30天的激活宽限期,每次封装可以重置这个激活宽限期,但每

个系统只可反复封装3次,即3次重置宽限期。如果选中这个选项就不会重置

宽限期了。

(2)使用最小化安装

启动一个最简的系统安装模式部署系统。不使用的话可能会要求用户插入原

版光盘以取得部分文件,或可能出现直接报错的情况。建议使用最小化安装模式。(3)不重新产生安全标识符

安全标识符(SID)是用于唯一标识计算机的标识符,如果是对安全性要求

较高的网络或需要加入“域”,建议重新生成SID。而如果是一般的用户,可以

点选这个选项去掉重新生成SID 的过程。注意,生成SID会增加额外的系统部

署时间。

(4)检测非即插即用硬件

默认只检查即插即用硬件,检测非即插即用硬件会进一步识别目标计算机硬

件设备,但会占用额外的系统部署时间。

(5)关机模式

如果封装完成后还要处理一下个别设置,选择“退出”;

如果封装完成后立即制作系统映像,选择“重启”;

如果封装完成后要稍等一段时间后才开始制作系统映像,选择“关机”。

上述设置随您的需要而定,没有定式的规则。一切选择好后,单击“重新封

装”按钮,封装就开始了。

(图1-8)

一般而言封装过程只需要很短暂的时间,而且您会发现就基本的封装方法而

言,封装软件的操作实在是太简单了。

封装结束后您就可以使用磁盘或文件映像工具制作系统映像了,但现在不建

议您将系统制作成系统映像,因为我们只是在学习基本的封装方法,而且现在的

系统远算不上完美的具有普遍适用性的可部署系统。

1.2.4 Windows XP 的基本部署流程

看完了基本的封装过程,再来看看基本的部署过程:

(图1-9)"

(图1-10)(图1-11)

(图1-12)(图1-13)*

(图1-14). (图1-15).

(图1-16)(图1-17)

(图1-18)(图1-19)

(图1-20). P9 (图1-21)

可见部署流程还是比较繁琐的,很多项目需要我们手动去点选,也有一些内

容需要我们手动去填写,这会使我们失去系统快速部署的优势,有什么方法可以

让系统自动的去应答这一切吗?方法有,而且是微软官方提供的,本书后几章中

会详细介绍。

至此,我们完成了Windows XP的基本封装与部署。

1.3 Windows 7 基本封装方法

Windows 7作为微软的又一巅峰之作,有望取代XP成为最普及的

Windows 操作系统。所以Windows 7也是我们必须研究的对象。且Windows

7与Vista、Server 2008属于同一代操作系统(均属于Windows 6.x),研究

好Windows 7可以让我们把握未来Windows 发展的动向,更好的将知识迁移

到同类操作系统。

1.3.1 安装Windows 7 Windows 7(如下简称Win7)的安装比XP更加简单,更友好的图形化操

作,更优秀的拓展性。我想安装Win7对大家来说是必备的技能,这里不再多说,

只是要特别强调2个小细节。

(1)分区时需要注意的

例如我们有一个50G 的未使用的硬盘,在此硬盘上分区并安装Win7,以

备安装好后执行系统封装操作。

(图1-22)

在新建一个例如20G 的用于安装系统的分区时,有如下的提示:

(图1-23); 单击确定后,我们发现分区变得“怪异”了:

(图1-24)

多了一个100M的系统保留的分区?对,Win7有些新功能需要这个分区来

实现。什么功能呢?如BitLock 等,大多数都是普通老百姓一辈子用不到一次的

功能。所以这个100M的分区不是那么的重要。

这个100M的分区就像在1.2.1节中所说的【启动分区】,这个分区在

Windows 下会自动隐藏,且不占用盘符。而安装系统的分区(如C 盘)则是【系

统分区】。这就又出现了1.2.1节中极力避免的【启动分区】与【系统分区】不

在一起的情况,这会阻碍我们部署系统的适用性。

既然第一这个100M 的分区对普通老百姓不是那么重要,第二这个100M

的分区会影响我们的部署操作,那我们有什么办法让Win7和WinXP一样将【启

动分区】与【系统分区】都做在同一个分区(如C 盘)里呢?有办法,我们可

以不使用Win7的分区工具,而是用第三方的,如DM、PM、PQ 等。

好,我们用第三方分区工具分好两个区,再执行Win7安装程序,终于进入

了我们熟悉的分区情况:(图1-25)

按照这种分区安装系统吧!

(2)启用Administrator"

Win7安装完毕后,默认不是以Administrator用户登录的。然而Win7 的

权限设置很严格,这为系统带来安全性的同时也为我们的封装操作带来了不必要

的麻烦。所以建议大家在执行系统封装操作时使用Administrator账户,封装完

毕部署到目标计算机后,Administrator用户又会自动禁用,无需担心安全性。

按照如下步骤启用Win7的Administrator账户:

打开“计算机管理”,选择左侧的“本地用户和组”中的“用户”项目。

(图1-26)

右击“Administrator”账户,在弹出菜单中单击“属性”,打开属性设置

页面,将“此账户已禁用”项目前的对号勾掉。然后单击“确定”按钮。

(图1-27)再右击安装Win7时创建的账户(例如我的Sky_Test),在弹出菜单中单击“删除”,弹出如提示页面时单击“是”。这样我们就完成了对Administrator

账户的启用,并清理了本机中残留的其他账户,把将要部署的系统做的更加干净。

(图1-28)

完成1-28图中的调整后,注销当前用户,使用Administrator用户登录吧!(图1-29)1.3.2 Windows 7的封装工具

Windows 7的封装工具位于系统目录下,具体位置为:

C:\Windows\System32\sysprep(假设C盘为系统分区)。

(图1-30)

其中Sysprep.exe就是Win7的封装工具,版本号为3.14,比WinXP的

2.0高了不少。

关于Windows 7系统的封装部署资料,以及Windows 7系统的定制方法,

如果您有兴趣可以阅读微软官方的Windows AIK,1G 多的资料,相信有您想

要的。

1.3.3 Windows 7 的基本封装流程

Win7 不再需要在C 盘创建Sysprep 文件夹并复制封装工具到其中了,只

需要运行C:\Windows\System32\sysprep\sysprep.exe即可,运行后如下图:

-

(图1-31)

(1)有两种模式,“全新体验(OOBE)”和“审核模式”,我们面对的

是最终用户,所以我们要选择前者。

(2)通用,即表示封装后为通用模式,可适应更多的目标计算机,请选中。(3)关机选项倒是和WinXP时一样,也有“重新启动”、“退出”、“关

机”三个选项,详见1.2.3节中第(5)条。

点选完毕后,单击“确定”按钮开始封装。

(图1-32)

Win7的封装要经历“处理清理阶段的Sysprep 插件”、“处理生成阶段的Sysprep 插件”等过程,需要比WinXP封装更长的时间,请耐心等待,所有封装过程都会自动化的完成。

1.3.4 Windows 7 的基本部署流程

看完了封装过程,我们来看看Win7的部署过程:

(1)第一次系统启动,部署系统到目标计算机:

(图1-33)

(图1-34)(图1-35)

(图1-36)(2)系统重启,进入OOBE 过程:

(OOBE,Out-of-box experience,一般是指在安装完Windows 后就会

进行的一个对Windows 进行基本设置的步骤)

(图1-37)5 p6 (图1-38)

(图1-39))

(图1-40)! (图1-41)

(图1-42)(图1-43)

(图1-44)- (图1-45)) u5

(3)设置完毕,进入系统3

(图1-46)# Q+ (图1-47)!

虽然从WinXP到Win7间隔了很长的时间,技术上有了很大的提升,但从

总体上看,封装与部署的整个流程没有太大的变动。Win7的OOBE 过程仍旧需

要我们手工点选一些选项,这些过程可以做成自动应答的方式,这种方式在其后

的几章里会教给大家,这里先不着急。

1.4 本章总结

本章着重讲述了系统封装与部署的基本概念,并与大家一起看了看

Windows XP和Windows 7的基本封装与部署流程。本章重于让大家对

Windows 操作系统的封装与部署技术有一个概念性的了解,并掌握一些基本的

操作技能与技巧。学习一切只是都需要基本知识做铺垫,扎实的基本知识是学习

更高层知识的铺垫与根本!! b4

本章只完成了基本的封装,这样封装出来的系统可适用范围有限,且自动化

程度不高。怎么让系统具有更高的适用范围也更自动化呢?本书如下各章将逐步

进行解析。

不要忘记访问https://www.360docs.net/doc/321829114.html,/?751为我们天空带来收益哦!第二章、硬件驱动的处理

驱动程序是沟通操作系统和硬件的重要桥梁,通过驱动程序可以让操作系统

识别更多的硬件,并使硬件发挥更好的性能。然而封装系统时我们必须要处理一

下源计算机的硬件驱动,毕竟你无法确定目标计算机是怎么样的硬件环境。

处理好源计算机系统中的硬件驱动,可以拓展系统可部署的范围,减少因系

统残留源计算机硬件和驱动信息造成的各种不良影响。虽然我没有在微软官方文

档中看到必须处理源计算机硬件驱动的内容,但是根据长时间的实践与应用,在

无数前辈们的基础上,我们总结出了一套切实可行的源计算机硬件驱动处理方法,

这也是本章将要讲述的重点内容。

Windows操作系统是即插即用的,也就是说当出现新硬件时会自动去识别,

如果可能则会自动安装该设备的驱动。所以即使我们不处理源计算机操作系统的

驱动程序,当系统部署到新计算机时也会自动的识别新硬件,这也可能是为什么

微软没有强调封装部署必须处理驱动程序的原因之一。但现实情况事与愿违,某

些硬件驱动由于硬件ID的问题本身就存在冲突,某些时候有些驱动程序的残留

会造成不良影响等等,这虽然不是Windows 的原因而是驱动制作者的问题,但

这些情况实实在在的影响了系统封装与部署。" l/ q2 u1 ?' J4 I1 k K3 j

我们要讲理论,可也要结合实践,实践才能出真知。本章将结合实践,讲讲

在现实中我们应该怎么做。

2.1 硬件抽象层(HAL)的处理

2.1.1 什么是HAL 硬件抽象层(Hardware Abstraction Layer,简称HAL),位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化。它隐藏了特定平台的

硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种

平台上进行移植。简单说就是将硬件抽象化,以利于各种操作。

如果要查看当前计算机的HAL 类型,打开设备管理器,展开“计算机”项

目,即可看到当前计算机的HAL类型。HAL 类型又被很多技术员称为“电源管

理模式”或简称“电源”。

Windows XP的HAL有很多种,有“Advanced Configuration and

Power Interface (ACPI)PC”、“ACPI Multiprocessor PC”、“ACPI

Uniprocessor PC”、“MPS Multiprocessor PC”、“MPS Uniprocessor

PC”、“Standard PC”以及等等,种类很多,而且特殊的计算机硬件还会有

特殊的HAL。Windows 2000、Windows Server 2003这些与Windows XP

同属于Win5.x的操作系统亦是如此,HAL 种类繁多。如果算上32位和64位

系统的差别,那么HAL的种类至少还要乘2来计算。( r0 W0 v5 W0 A& f, _2 h6

G% i

Windows 7的HAL 就简单多了,分为了32位和64位系统两种:“ACPI

x86-based PC”和“ACPI x64-based PC”,中文版本可能翻译了其名称,

“ACPI 基于x86的电脑”和“ACPI 基于x64的电脑”。Windows Vista、

Windows Server 2008这些与Windows 7同属于Win6.x的操作系统也是一

样,HAL简单高效。某些特定机型还有个别专用的HAL,一般用户很少碰到,

这里不再介绍。

根据微软文档的要求,封装与部署不可用于不同HAL的计算机。不同的HAL之间是不完全通用的,如果非要把不适合此计算机的HAL 用于此计算机,那么

很容易出现各种错误。最常见的例子,如部署有Windows XP某计算机在系统

部署后无法正常关机和重启。6 U0 ^6 {; R3 N6 Z

那我们要如何处理HAL,特别是像Windows XP这种HAL 非常多的操作

系统,难道要手动改吗?莫着急,待我一一道来。

2.1.2 Windows XP HAL的处理

Windows XP的HAL最常见的也有6种,既然微软的要求是不同HAL 的

不可通用,那如果碰到封装时源计算机是A 种HAL,而部署的目标计算机是B

种HAL,怎么办?手动改?如果部署了500台计算机个个手动改?或者我就封

装6种HAL的系统,碰到哪种HAL的计算机就部署哪个系统,这样做不是不可,

但一是需要维护至少6个系统映像十分麻烦,二是对于一般的IT 人员还真不一

定分得开什么计算机用什么HAL。

那能不能自动判断并自动更改HAL?勇于探索的前辈们还真找到了方法。

这个方法源于Windows XP到Windows Vista 之间的年代,那时有一个测试版

本,叫做Windows Longhorn。Windows Longhorn虽然没有像现在Win6.x

那样将HAL简化到只有32位HAL和64位HAL两种,但Windows Longhorn

具备了自动判定计算机HAL 并自动更改HAL 的能力。由于Longhorn的引导

方式与XP无异,都是使用NTLDR 引导,所以前辈们完美实现了移植Longhorn

的HAL判定到XP!

要准备的文件和程序:

(1)Windows Longhorn 的NTLDR,位于Windows Longhorn的C盘根目录下,默认隐藏。$ ~ p2 \; [2 h9 `8 _

(2)SetACL.exe,用于更改部分注册表键值的权限。

移植Longhorn的HAL 自动判定到XP的方法:* j& o W1 G/ K% h# z+

N+ M1 K! Q: ]$ i

1、在当前系统中提取所需文件- K ~' m% q0 o4 d* Y3 ~

(1)如果系统安装过Service Pack,那么找到“C:\Windows\Driver

Cache\i386”目录下与你当前Service Pack 版本相同的.cab 文件。例如当前系

统是XP SP3,那么找“C:\Windows\Driver Cache\i386\SP3.cab”。如果系

统没有安装过Service Pack,那么找“C:\Windows\Driver

Cache\i386\driver.cab”。

(2)新建一个文件夹,如C:\Windows\HalCache。

(3)将(1)中找到的cab 包中的halacpi.dll、halapic.dll、halmps.dll、

halaacpi.dll、halmacpi.dll、hal.dll、ntkrnlmp.exe、ntkrnlpa.exe、

ntkrpamp.exe、ntoskrnl.exe解压到C:\Windows\HalCache文件夹中。' }8 o'

M% X7 }9 ^: F- H9 U

(4)将hal.dll改名为halstnd.dll,将ntoskrnl.exe改名为ntkrnlup.exe。

8 I; j% T( N- u; a6 ?

(5)将C:\Windows\HalCache中所有文件复制到C:\Windows\System32

中,覆盖同名文件。

(6)删除C:\Windows\HalCache。

2、创建一个.inf文件

在C:\Windows\Inf文件夹(默认为隐藏属性)中创建一个名为dtecthal.inf

的纯文本文件,写入如下内容:

[Version]

signature="$Windows NT$"

DriverVer=07/01/2001

[hal]

MPS_MP=halmps.dll- q5 N# g7 L) p# }

MPS_UP=halapic.dll# N: V! a) n J! g5 B" c; R

E_ISA_UP=halstnd.dll" u9 O1 \0 A; S8 R3 [0 E8 j

ACPIPIC_UP=halacpi.dll4 ~2 V8 _6 N/ i* |( `: ~* M4 p

ACPIAPIC_UP=halaacpi.dll8 D$ Q6 [+ o2 w

ACPIAPIC_MP=halmacpi.dll

[ACPIOptions]

ACPIEnable=2

ACPIBiosDate=01,01,1999. W9 Q! I& r6 x2 J o

$ X; y ^/ f6 I* B8 x3 |

3、修改启动文件, P$ x2 D5 Q G4 I/ V

C:\NTLDR和C:\Boot.ini均为具有隐藏属性的系统文件,且具有只读属性,

请去掉这些属性后再做下列操作。% q# x" b3 }' C

(1)备份XP的NTLDR 为NTLDR_BAK(这个文件没有后缀名)。

(2)将Longhorn的NTLDR 复制到C 盘根目录下。(3)将Bootfont.bin改名为Bootfont.bin.bak,由于Longhorn的NTLDR

加载XP的Bootfont.bin会出现乱码的情况,所以先改名,以备以后恢复。(如

果你是英文版系统则没有Bootfont.bin,可略过此步骤)

(4)打开Boot.ini,找到XP的启动项,例如:

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows

XP Professional" /noexecute=optin /fastdetect

在最后加入自动检测HAL 的参数“/detecthal”:

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows

XP Professional" /noexecute=optin /fastdetect /detecthal) w" D- `9 u( t2

e3 F" V

4、处理掉当前的HAL 信息3 Q5 B. x/ n6 m: P+ H( V! R

一直有的方法说是把当前的HAL 改成Standard PC 可以提高兼容性,的确

改成这个之后无论HAL 是什么样的都不会出现如不能启动这种问题,至多是不

能正常关机而已,可以说这个的确有很高的兼容性。但经过一段时间的观察、测

试和应用,发现这种方法只是个权宜之计。我们既然有了HAL 自动判定,且我

们担心源计算机的HAL 信息会影响系统在目标计算机中的部署,那么我们直接

把当前计算机的HAL做掉好了。

注册表中

“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL”键

和“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\

Root\ACPI_HAL”键记录了当前计算机的HAL 类型和信息,删除掉它俩就相当于做掉了目标计算机的HAL。

但这两个键都是有保护的,哪怕是Administrator用户都不能随便删除它们,

幸好我们刚才准备了SetACL.exe。在命令提示符中切换到SetACL 所在目录,

运行如下命令:V. ]0 k8 y# J$ E7 F) k4 p- J

setacl.exe MACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL

/registry /grant everyone /full6 ]; h2 |# s9 f+ L: ^ M. g

setacl.exe MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL

/registry /grant everyone /full

打开注册表编辑器,删除掉

“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL”键

和“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\

Root\ACPI_HAL”键。0 D0 c- g+ ^5 G9 E* e+ s5 x, M. @

打开设备管理器,可看到以前的“计算机”项目不见了,对,源计算机的HAL

已经被我们删除了。当此系统部署到目标计算机时,由于我们已经移植了

Longhorn 的HAL 自动判定,被删除的HAL 注册表键会自动创建,且与目标计

算机的HAL 相匹配。

经过一番折腾,我们成功的将Longhorn的HAL自动判定功能移植给了XP,

由于这种HAL 自动判定技术也完全来自于微软,所以正确率和稳定性毋庸置疑。

至此,XP 由于HAL类型造成的部署适用性问题完美解决。+ G, Y4 i* h, ?, A" F:

`

2.1.3 Windows XP HAL的自动处理$ P# [; n, q, c 8 N6 V3 j5 D J- t, N2 q

虽然操作一次2.1.2中的过程并不复杂,但很多人为了达到完美封装经常要

几遍甚至几十遍的调整系统并做系统封装测试,那么 2.1.2中的过程就变的麻烦

了。为了达到便利的操作,减少手工操作可能带来的错误,我书写了一段AU3

程序来代替这个过程。

注意,为了方便大家的理解,我加入了足够的注释。但这仍是一段简单的代

码,为的是给大家展示自动化过程,为大家提供一份参考而已,不具备各种纠错

功能。仅算作是抛砖引玉吧。

# n$ e6 e) \9 s

1. ;将要用到的SetACL.exe和Longhorn的NTLDR编译进此AU3程序

2. #Region

3. #AutoIt3Wrapper_Res_File_Add=NTLDR_Longhorn

4. #AutoIt3Wrapper_Res_File_Add=SetACL.exe

5. #EndRegion

6.

7. ;执行主函数,而后退出程序

8. _DetecHAL_Main()

9. Exit

10.

11. ;主函数,调用其他函数完成任务

12. Func _DetecHAL_Main()

13. ;(1)提取文件,改名,并放置到相应位置

14. _DetecHAL_HalFiles()

15. ;(2)创建dtecthal.inf及其内容

16. _DetecHAL_HalInf()

17. ;(3)修改Boot.ini并替换NTLDR

18. _DetecHAL_HalBootFiles()

19. ;(4)删除源计算机HAL信息 20. _DetecHAL_KillCurrentHAL()

21. MsgBox(0, "", "完成")

22. EndFunc ;==>_DetecHAL_Main

23.

24. ;由cab包中提取文件,并修改与复制

25. Func _DetecHAL_HalFiles()

26. ;检测当前Service Pack版本

27. Local $SP = @OSServicePack

28. Local $Package

29. If @OSServicePack = "" Then

30. ;如果检测不到SP版本则使用driver.cab

31. $Package = @WindowsDir & "\driver cache\i386\driver.cab"

32. Else

33. ;如果检测的到SP版本,则使用与SP版本相匹配的sp[SP版本].cab包

34. Local $n = StringRight($SP, 1)

35. $Package = @WindowsDir & "\driver cache\i386\SP" & $n & ".cab"

36. EndIf

37. ;使用extrac32.exe解压cab包中的文件

38. Local $Extrac = @WindowsDir & "\System32\extrac32.exe"

39. ;创建存放文件的临时文件夹

40. Local $CacheDir = @WindowsDir & "\Temp\HalCache"

41. DirCreate($CacheDir)

42.

43. ;运行extrac32.exe到cab包中解压所需文件

44. RunWait($Extrac & " /e /y " & '"' & $Package & '"' & " " & _

45. "halacpi.dll halapic.dll halmps.dll halaacpi.dll halmacpi.dll hal.dll "

& _

46. "ntkrnlmp.exe ntkrnlpa.exe ntkrpamp.exe ntoskrnl.exe" & _

47. " /l " & '"' & $CacheDir & '"', "", @SW_HIDE)

48. ;将hal.dll和ntoskrnl.exe改名

49. FileMove($CacheDir & "\hal.dll", $CacheDir & "\halstnd.dll", 1)

50. FileMove($CacheDir & "\ntoskrnl.exe", $CacheDir & "\ntkrnlup.exe", 1) 51. ;复制临时目录下的所有文件到Syste32中,覆盖同名文件

52. FileCopy($CacheDir & "\*.*", @WindowsDir & "\System32\*.*", 1)

53. ;删除刚才使用的临时文件夹

54. DirRemove($CacheDir, 1)

55. EndFunc ;==>_DetecHAL_HalFiles

56.

57. ;创建dtecthal.inf,写入内容

58. Func _DetecHAL_HalInf()

59. Local $Inf = @WindowsDir & "\inf\dtecthal.inf"

60.

61. ;如果发现已存在同名文件,删除后重新创建

62. If FileExists($Inf) Then FileDelete($Inf)

63.

64. ;写入Inf内容

65. IniWrite($Inf, "Version", "signature", '"' & "$Windows

NT[ DISCUZ_CODE_0 ]quot; & '"')

66. IniWrite($Inf, "Version", "DriverVer", "07/01/2001")

67. IniWrite($Inf, "hal", "MPS_MP", "halmps.dll")

68. IniWrite($Inf, "hal", "MPS_UP", "halapic.dll")

69. IniWrite($Inf, "hal", "E_ISA_UP", "halstnd.dll")

70. IniWrite($Inf, "hal", "ACPIPIC_UP", "halacpi.dll")

71. IniWrite($Inf, "hal", "ACPIAPIC_UP", "halaacpi.dll")

72. IniWrite($Inf, "hal", "ACPIAPIC_MP", "halmacpi.dll")

73. IniWrite($Inf, "ACPIOptions", "ACPIEnable", "2")

74. IniWrite($Inf, "ACPIOptions", "ACPIBiosDate", "01,01,1999")

75. EndFunc ;==>_DetecHAL_HalInf

76.

77. ;修改与Longhorn HAL自动判定相关的启动文件

78. Func _DetecHAL_HalBootFiles()

79.

80. ;去掉系统目录下NTLDR的只读、系统和隐藏权限

81. FileSetAttrib(@HomeDrive & "\NTLDR", "‐RSH") 82. ;将XP的NTLDR 改名为NTLDR_BAK

83. FileMove(@HomeDrive & "\NTLDR", @HomeDrive & "\NTLDR_BAK", 1)

84. ;装载Longhorn的NTLDR到C盘根目录

85. FileInstall("NTLDR_Longhorn", @HomeDrive & "\NTLDR")

86. ;恢复NTLDR的只读、系统和隐藏权限

87. FileSetAttrib(@HomeDrive & "\NTLDR", "+RSH")

88.

89. ;去掉系统目录下Boot.ini的只读、系统和隐藏权限

90. FileSetAttrib(@HomeDrive & "\Boot.ini", "‐RSH")

91. ;读取当前的启动信息

92. Local $s = IniRead(@HomeDrive & "\Boot.ini", "operating systems", _

93. "multi(0)disk(0)rdisk(0)partition(1)\WINDOWS", "")

94. ;如果当前的启动参数中不包括/detecthal,则为其添加此参数

95. If Not (StringInStr($s, "/detecthal")) Then

96. $s = $s & " /detecthal"

97. IniWrite(@HomeDrive & "\Boot.ini", "operating systems", _

98. "multi(0)disk(0)rdisk(0)partition(1)\WINDOWS", $s)

99. EndIf

100. ;恢复系统目录下Boot.ini的只读、系统和隐藏权限

101. FileSetAttrib(@HomeDrive & "\Boot.ini", "+RSH")

102.

103. ;如果系统目录下村咋诶Bootfont.bin则执行如下操作

104. ;(英文系统没有Bootfont.bin)

105. If FileExists(@HomeDrive & "\Bootfont.bin") Then

106. ;去掉系统目录下Bootfon.bin的只读、系统和隐藏权限

107. FileSetAttrib(@HomeDrive & "\Bootfont.bin", "‐RSH")

108. ;将Bootfont.bin改名为Bootfont.bin.bak

109. FileMove(@HomeDrive & "\Bootfont.bin", @HomeDrive &

"\Bootfont.bin.bak", 1)

110. EndIf

111. EndFunc ;==>_DetecHAL_HalBootFiles

112. 113. ;删除源计算机系统的HAL信息

114. Func _DetecHAL_KillCurrentHAL()

115. ;确定临时目录的存在性

116. DirCreate(@WindowsDir & "\Temp")

117. ;装载SetACL.exe到临时目录

118. FileInstall("setacl.exe", @WindowsDir & "\Temp\setacl.exe", 1)

119. ;去掉ACPI_HAL的权限保护

120. RunWait(@WindowsDir & "\Temp\setacl.exe" & " " & _

121. "MACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL " & _

122. "/registry /grant everyone /full", _

123. "", @SW_HIDE)

124. RunWait(@WindowsDir & "\Temp\setacl.exe" & " " & _

125. "MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL " & _

126. "/registry /grant everyone /full", _

127. "", @SW_HIDE)

128. ;删除刚才装载的SetACL.exe

129. FileDelete(@WindowsDir & "\Temp\setacl.exe")

130. ;删除ACPI_HAL键

131.

RegDelete("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL") 132.

RegDelete("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL")

作业5 抽象与封装三

作业五抽象与封装三 确定以下代码段中是否存在错误,如果有错误,指出是逻辑错误还是语法错误,请在程序中用“绿色”标出错误的地方,并在每个练习的空白处写下正确的代码。如果代码中没有错误,则在答案中写上“没有错误”。注意:在每个程序段中可能包含多处错误。 问题1 、以下代码定义了Product类,它有一个不带参数的构造方法,将产品的名称设置为一个空的String,将price设置为0.00;该类还有一个toProductString方法,它返回一个包含产品的name和price的String import java.text.*; public class Product{ private String name; private double price; private static DecimalFormat money=new DecimalFormat("$0.00"); public Product() { name=" "; price=0.00; } Public String toProductString() { return name+" costs "+money.format(price); } }//end class Product 答案:没有错误 问题2 、如下代码定义了Product类的另一个构造方法,它有2个参数,并将这些参数赋给相应的实例变量 public Product(String name, double price) { name= name; price=price; } 答案: https://www.360docs.net/doc/321829114.html,= name; this.price=price; 若类的构造方法中的参数与类的实例变量命名为相同的名称,在成员方法中引用的变量名为局部变量,若想引用视力变量就要加上this 问题3、如下代码定义了两个set方法,用于设置Product类的name和price

第6章_抽象、封装与类

第六章抽象、封装与类主要内容 ?一、抽象与封装 二、J a v a的类 三、对象的创建与使用 四、参数传递 五、匿名对象 1、抽象 抽象内涵 去除掉对象中与主旨无关的次要部 分,或是暂时不予考虑的部分 抽取出与研究工作有关的实质性的 内容加以考察 软件开发方法中所使用的抽象类型 (1)过程抽象 (2)数据抽象

(1)过程抽象 将整个系统功能划分为若干部分,强调功能完成的过程和步骤 面向过程的软件开发方法采用的就 是这种抽象方法 使用过程抽象有利于控制、降低整个 程序的复杂度 缺点:这种方法本身自由度较大,难 于规范化和标准化,操作起来有一定 难度,在质量上不易保证 (2)数据抽象 2、封装 利用抽象数据类型将数据和操作封装在一起 数据被保护在抽象数据类型的内部 系统其他部分只能通过被授权操作 与抽象数据交互 在面向对象程序设计中 抽象数据类型通过“类”来代表

每个类都封装相关的数据和操作 在实际开发过程中 类常用来构建系统内部的模块 ?封装特性把类内的数据保护得很严密, 模块与模块间仅通过严格控制的界面进 行交互 ?使它们之间耦合和交叉大大减少,从而 降低了开发过程的复杂性,提高了效率 和质量,减少了可能的错误 保证程序中数据的完整性和安全性主要内容 一、抽象与封装 ?二、J a v a的类 三、对象的创建与使用 四、参数传递 五、匿名对象 二.J a v a的类 ?1.J a v a类概念

2.类的定义与修饰 3.域 4.方法 1、J a v a类概念 类(C l a s s)和对象(O b j e c t)是面向对象程序设计方法中最核心的概念。 类是对某一类事物的描述(共性),是 抽象的、概念上的定义; 对象则是实际存在的属该类事物的 具体的个体(个性),因而也称为实 例(I n s t a n c e)。 1、J a v a类概念 类是J a v a程序的基本组成要素 封装了一类对象的状态和方法,是该 类对象的原型 J a v a程序设计就是定义类的过程

面向对象及封装

面向对象抽象及封装 主讲:钟起杭 面向过程:面向过程关注的是一个具体的流程,考虑它是如何实现,关心的是功能的实现。面向对象:把客观的可见的事物都当做是一个对象(万事万物皆对象),面向对象设计思想在考虑问题时,以具体的事物(对象)为单位,考虑它的属性(特征)及动作(方法),关注的是整体,这符合我们解决问题的一般思路—>因人而异,因时而异都在面向对象编程思想中体现,这也使得面向对象编程更加容易,因为这种思想更加贴近我们的日程生活。 面向对象的特点: 抽象:万事万物皆对象,那么对于具有一定相同属性的事物可以归类于一个集合,对这类食物的简单外观或者动作的描述(抽象)- 产生了类。那么对事物的具体描述就能产生具有这类共同属性的对象。 封装:什么是封装?封装就是将对象具有的一些属性和方法通过封装打包到一起,共同体现一个事物的特征。为什么要封装?因为对象也是隐私的,没有人希望外界能知道自己的隐私,所以为了确保对象(爱人)在外界的良好形象就要保护好对象的隐私(对于人来说),那么对于程序来说,让别人知道的隐私越少,暴露出来的bug也能越少。当然隐私有时候也不是绝对的,比如有些事情对于家人就不算隐私,对同事,同学就完全算是隐私(身体上的特征),所以java语言就有不同的访问修饰符来适应这些不同的情况。 访问修饰符: public:公共的,可以理解为一个人的外貌特征,是谁都能看到的了解的。 protected:对于家庭是非隐私的,对于外界却是隐私的 default:在某一人群中不是秘密,对于陌生人来说就算是隐私了(只能在本包中能看到,跨包了就没办法看到的。) private:完全的隐私,除了自己别人都不能知道的。

芯片封装工艺及设备

《微电子封装技术》复习提纲 第一章绪论 ●微电子封装技术的发展特点是什么?发展趋势怎样?(P8、P9) 特点:微电子封装向高密度和高I/O引脚数发展,引脚由四边引出向面阵排列发展微电子封装向表面安装式封装(SMP)发展,以适合表面安装技术(SMT) 从陶瓷封装向塑料封装发展 从注重发展IC芯片向先发展后道封装再发展芯片转移 发展趋势:微电子封装具有的I/O引脚数更多 微电子封装应具有更高的电性能和热性能 微电子封装将更轻,更薄,更小 微电子封装将便于安装、使用和返修 微电子安装的可靠性会更高 微电子封装的性能价格比会更高,而成本却更低,达到物美价廉 ●微电子封装可以分为哪三个层次(级别)?并简单说明其内容。(P7) 用封装外壳将芯片封装成单芯片组件和多芯片组件的一级封装,将一级封装和其他元器件一同组装到印刷电路板上的二级封装以及再将二级封装插装到母版上的三级封装硅圆片和芯片虽然不作为一个封装层次,但却是微电子封装的出发点和核心。在IC芯片与各级封装之间,必须通过互连技术将IC芯片焊区与各级封装的焊区连接起来形成功能,也有的将这种芯片互连级称为芯片的零级封装 ●微电子封装有哪些功能?(P19) 电源分配、信号分配、散热通道、机械支撑、环境保护 ●芯片粘接方法分为哪几类?粘接的介质有何不同(成分)?(P12) Au-Si合金共熔法(共晶型) Pb-Sn合金片焊接法(点锡型) 导电胶粘接法(点浆型);环氧树脂 有机树脂基粘接法(点胶型);高分子化合物 ●简述共晶型芯片固晶机(粘片机)主要组成部分及其功能。 1 机械传动系统 2 运动控制系统 3 图像识别(PR)系统 4 气动/真空系统 5 温控系统 机械系统 ?目标:芯片+框架 ?组成部分: ? 1 框架供送部分进料(框架分离)、送料、出料 ? 2 芯片供送部分 ?目标:

抽象、封装与类(一)

抽象、封装与类(一) 学生姓名:学号:专业班级: 实验类型:□验证□综合□设计□创新实验日期:实验成绩: 一、实验项目名称 抽象、封装与类(一) 二、实验目的 1、熟练掌握如何自定义一个类。 2、熟练掌握如何定义构造函数,如何创建对象。 三、实验基本原理 在计算机技术的软件开发方法中所使用的抽象有两类:一类是过程抽象,另一类是数据抽象。 过程抽象将整个系统的功能划分为若干部分,强调功能完成的过程和步骤。面向过程的软件开发方法采用的就是这种抽象方法。数据抽象是与过程抽象不同的抽象方法,它把系统中需要处理的数据和这些数据上的操作结合在一起,根据功能、性质、作用等因素抽象成不同的抽象数据类型。每个抽象数据类型既包含了数据,也包括了针对这些数据的授权操作,是相对于过程抽象更为严格、也更为合理的抽象方法。 封装就是指利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型的内部,系统的其他部分只有通过包裹在数据外面的被授权的操作,才能够与这个抽象数据类型交流和交互。封装使得抽象数据类型对内成为一个结构完整,可自我管理、自我平衡、高度集中的整体;对外则是一个功能明确、接口单一、可在各种合适的环境下都能独立工作的右击的单元。 Java程序设计就是定义类的过程,但是Java程序中定义的类的数目和功能都是有限的,编程时还需要用到大量的系统定义好的类,即Java类库中的类。 类库是JAVA语言的重要组成部分。JAVA语言由语法规则和类库两部分组成,语法规则确定JAVA程序的书写规范;类库(或称为运行时库)则提供了JAVA 程序与运行它的系统软件(JAVA虚拟机)之间的接口。 创建对象:首先说明新建对象所属的类名,然后说明新建对象的名字,赋值号右边的NEW是为新建对象开辟内存空间的算符。 构造函数是与类同名的方法。 四、主要仪器设备及耗材 计算机一台、my Eclipse软件 五、实验步骤 (1)打开My Eclipse,新建工程和类。分别输入本实验的代码。 (2)按照需求,输入如下代码: P95~96:4-7、4-8、4-9(综合) 模仿例4-2,编写如下程序。 定义一个表示学生的类Student,包括属性“学号”、“班号”、“姓名”、“性别”、“年龄”;方法“获得学号”、“获得班号”、“获得姓名”、“获得性别”、“获得年龄”、“修改年龄”。 为Student类定义构造函数初始化所有属性,增加一个方法public String toString(),把Student类对象的所有属性信息组合成一个字符串输出。 在main()中创建Student类对象,测试自定义类。

windows10系统封装过程的详解

windows10系统封装过程的详解 首先说说windows10最新版的安装母盘过程,封装是为了更好的备份是恢复系统: 1、安装母盘。 安装系统前,删掉所有分区,以系统本身的光盘镜像启动,在安装过程中分区,分区多出来一个500M的小分区,有的是100M的分区,这个小分区一定要删掉,要不安装系统的时候,部分启动文件和引导文件会被安装到这个小分区里,会造成装系统后,不能引导启动的问题,不建议PE下安装母盘,要不容易出现分区排序错乱的情况。 安装系统过程中选测:【加入域】,其他方面没什么设置要求。 2、删除目前登录用户,设置管理员方式登录。 安装完母盘后,为访客登录方式,没有太多的权限,那就要登录管理员的登录,此时,右键开始菜--计算机管理--本地用户和组---双击:用户,再双击右面框里的【administrator】,将【账户已禁用】前面的勾去掉。点击确定退出对话框。再点击开始--注销--再用【administrator】用户登录。 进系统后,右键开始---打开【控制面板】--用户账户--删除用户账户--删除除管理员以外的用户账户--删除文件,确定退出。

3、激活系统。 激活系统后才能进行系统设置,否则某些设置项将无法设置。 4、启用管理员批准模式 开始--运行,输入:gpedit.msc回车,双击本地计算机策略的【windows 设置】--安全设置--本地策略--安全选项--双击【用户账户控制:用于内置管理员账户的管理员批准模式】,点击启用。 5、给系统瘦身一次。 这样可以在优化和设置的时候,时不时看看C盘实际占用的大小。 6、虚拟内存转移到D盘。关闭磁盘保护。 7、右键C盘,点击清理磁盘,删掉没有用的东西。顺便删除还原点。和没用的程序。 8、开启管理员权限。 先运行【获取管理员权限】和右键【以管理员权限运行】的注册表文件。 9、关闭电源休眠,节约体积。 右键开始菜单,右键打开管理员模式的命令提示符,运行:powercfg -h off

抽象工厂模式abstractfactory

抽象工厂模式 概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具·体对象创建工作”的紧耦合?这就是我们要说的抽象工厂模式。 意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类 模型图 逻辑模型: 物理模型: 生活中的例子 抽象工厂的目的是要提供一个创建一系列相关或相互依赖对象的接口,而不需要指定它们具体的类。这种模式可以汽车制造厂所使用的金属冲压设备中找到。这种冲压设备可以制造汽车车身部件。同样的机械用于冲压不同的车型的右边车门、左边车门、右前挡泥板、左前挡泥板和引擎罩等等。通过使用转轮来改变冲压盘,这个机械产生的具体类可以在三分钟内改变。 抽象工厂之新解 虚拟案例 中国企业需要一项简单的财务计算:每月月底,财务人员要计算员工的工资。 员工的工资 = (基本工资 + 奖金 - 个人所得税)。这是一个放之四海皆准的运算法则。

为了简化系统,我们假设员工基本工资总是4000美金。 中国企业奖金和个人所得税的计算规则是: 奖金 = 基本工资(4000) * 10% 个人所得税 = (基本工资 + 奖金) * 40% 我们现在要为此构建一个软件系统(代号叫Softo),满足中国企业的需求。 案例分析 奖金(Bonus)、个人所得税(Tax)的计算是Softo系统的业务规则(Service)。 工资的计算(Calculator)则调用业务规则(Service)来计算员工的实际工资。 工资的计算作为业务规则的前端(或者客户端Client)将提供给最终使用该系统的用户(财务人员)使用。 针对中国企业为系统建模 根据上面的分析,为Softo系统建模如下: 代码: 针对美国企业为系统建模 为了拓展国际市场,我们要把该系统移植给美国公司使用。 美国企业的工资计算同样是: 员工的工资 = 基本工资 + 奖金 - 个人所得税。 但是他们的奖金和个人所得税的计算规则不同于中国企业: 美国企业奖金和个人所得税的计算规则是:

电子封装专用设备

电子封装专用设备 第一部分 1.半导体制造主要工艺流程与设备概述。 图1 半导体制造、封装、测试工艺流程 图2 芯片制造基本工艺流程图

半导体制造工艺是由多种单项工艺组合而成的,主要包括以下四类:薄膜形成工艺;图形转移工艺;掺杂工艺;热处理工艺。 ⑴薄膜形成工艺与设备 薄膜工艺包括氧化工艺和薄膜淀积工艺。通过生长或淀积的方法,生成集成电路制造过程中所需的各种材料的薄膜,如金属层、绝缘层等。 氧化(Oxidation)工艺的主要目的是在硅衬底表面形成氧化膜SiO2。 在硅衬底表面形成SiO2氧化膜的方法:化学气相淀积(CVD)和氧化。其中氧化又分为自然氧化(在常温下,硅表面可生长出SiO2氧化层,厚约2nm)和热氧化(Thermal Oxidation)(在高温炉中反应,形成较厚的SiO2氧化层,也称为热生长法) 热氧化法的3种环境:①干氧氧化(O2) ②水蒸气氧化(H2O) ③湿氧氧化(H2O+O2) 图3 热氧化生成二氧化硅设备原理示意图氧化炉主要有高温干式氧化炉和高温湿式氧化炉两种,基本原理

如上图所示。 化学气相淀积(CVD, Chemical Vapor Deposition)是利用气态的先驱反应物,以某种方式激活后,通过原子或分子间化学反应的途径在衬底上淀积生成固态薄膜的技术。利用CVD可获得高纯的晶态或非晶态的金属、半导体、化合物薄膜,能有效控制薄膜化学成分,且设备运转成本低,与其他相关工艺有较好的相容性。CVD技术已有100多年历史,应用领域很广,如轴承的耐磨涂层、核反应堆里的耐高温涂层。 CVD工艺采用的设备为CVD反应炉,有卧式反应炉立式反应炉。 (PECVD)其中PECVD是通过高能射频源获得的等离子体提供能量,

封装,继承,多态,抽象,接口

1.1封装 封装是面向对象编程的三大特征之一。封装就是将通过抽象得到的属性和方法相结合,形成一个有机的整体——“类”。封装的目的是增强数据安全性和简化编程,使用者不必了解具体的实现细节,所有对数据的访问和操作都必须通过特定的方法,否则便无法使用,从而达到数据隐藏的目的。 封装是面向对象编程语言对客观世界的模拟,客观世界的属性都是被隐藏在对象内部的,外界不能直接进行操作或者修改。譬如:常见的空调电视机等对象,这些对象都是封装好的,普通人只可以通过对小小的按钮操作来控制这些家电;不可以随意打开设备进行修改对象内容的配置。但是专业人员可以修改这些家电,而我们就是要做这些“专家”;如下图所示。 操作按钮 操作按钮 图1.1.1 封装对象 1.1.1为什么需要封装 通过第一阶段的学习,我们知道类由属性和方法组成,在类的外部通过本类的实例化对象可以自由访问和设置类中的属性信息,这样不利于属性信息的安全,示例1.1就是如此。示例1.1 public class Person { public String name; public int age; public void sayHello(){ System.out.print("你好!"); } } public class Test { public static void main(String[] args) { Person p=new Person(); https://www.360docs.net/doc/321829114.html,="皇帝"; p.age=1000;//属性信息可以直接设置 p.sayHello();

} } 上述代码在第一阶段Java的课程中经常见到,大致一看没什么问题,但是仔细分析过之后会发现:把年龄设置成1000合理吗? 由于Person类的属性都是公有的(public),那也就意味着在Person类的外部,通过Person类的实例化对象可以对这些公有属性任意修改,这就使得我们无法对类的属性进行有效的保护和控制。这属于设计上的缺陷,那能不能避免这种情况呢?这就需要用到下面的封装了。 1.1.2现实生活中的封装 现实生活中封装的例子随处可见,例如药店里出售的胶囊类药品,我们只需要知道这个胶囊有什么疗效,怎么服用就行了,根本不用关心也不可能去操作胶囊的药物成分和生产工艺。再例如家家户户都用的电视机,我们只需要知道电视机能收看电视节目,知道怎么使用就行了,不用关心也不可能去搞清楚电视机内部都有哪些硬件以及是如何组装的。这些都是现实生活中封装的例子。 在刚才的两个例子中,我们可以认为药物成分是胶囊的属性,但是用户不需要也不可能去操作它。我们也可以认为内部硬件是电视机的属性,但是用户也不需要去操作它。这就是现实生活中封装的特征,程序中的封装与此类似。 1.1.3程序中的封装 封装就是:将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部的信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。简而言之,封装就是将类的属性私有化,并提供公有方法访问私有属性的机制,我们看示例1.2。 示例1.2 public class Person{ //将属性使用private修饰,从而隐藏起来 private String name; private int age; public void sayHello() { System.out.print("你好!"); } } public class Test { public static void main(String[] args) { Person p=new Person(); https://www.360docs.net/doc/321829114.html,="杰克"; //编译报错 p.age=1000; //编译报错 p.sayHello(); } }

IC封装设备切片机电控系统设计

IC封装设备切片机电控系统设计 宋佳丽 (长春税务学院计算机系 吉林 长春 130117) 摘要:为了高速、高精度切割半导体晶片,切片机的电控系统要求具备高精度及高稳定度。根据系统设计指标和可编程控制器(PLC)的特点,选用日本OMRON公司的CS1G型PLC构成主控系统,FC10/400型高速电机及其配套变频器构成高速主轴系统,Y、Z轴则用PD-0535M型步进电机驱动器驱动步进电机构成开环控制系统,X轴采用交流伺服电机及增量式编码器构成半闭环系统,θ轴选用美国Parker公司DM1004B 型转台交流伺服电机及DrvMⅡ型电机驱动器,供电系统采用隔离变压器等方法来屏蔽电磁干扰。通过多模块运动控制软件协调控制,该系统完全达到了设计要求。 关键词:运动控制;可编程序控制器;集成电路封装;切片机 中图分类号:TP273+.5 文献标识码:B Control system design of wafer incision device for IC encapsulation SONG Jia-li (Changchun College of Taxation, Changchun 130117, P. R. China) Abstract: To incise apace and precisely semiconductor wafer, control system of wafer incision machine must be also high-accuracy and high-stability. Based on design demand and characteristic of programmable logic controller (PLC), a CS1G PLC of OMRON Corporation is selected for main system. A FC10/400 high speed motor and its frequency-converter is selected for high speed rotation system, a PD-0535M stepper motor driver is selected for Y and Z axis, and a AC servo motor is half closed looped by an incremental encoder for X axis. For θaxis, a DM1004B AC servo motor and a DrvMⅡ driver of American Parker Corporation are selected, and the electromagnetic interference of current supply system is shielded by a separate voltage changer. The system’ kinetic control software is design by means of multiple modular programming. So the system attained design demand quite. Key words: Kinetic control; PLC; IC encapsulation; wafer incision device 1引 言 IC封装是半导体三大产业之一,其后封装工序主要包括:切片、粘片、金丝球焊、塑封、检测及包装[1]。切片IC后封装中的第一道工序,其加工质量将直接影响整个生产线的产品质量。作为半导体后封装线上的第一道关键设备,切片机的作用是把制作好的晶片(矩形或棱形)切割成独立单元器件,为下一步单元晶片粘接作好准备[2][3]。 为了完成对3—6英寸的晶片的切割,切片机要高速、高精度完成一系列运动步骤,将整个晶片切割成许多的矩形或多边形单元晶片。因此,切片机的电控系统必须是一套高精度、高稳定度电控系统。 2电控系统设计 2.1总体结构及功能要求 切片机总体结构如图1所示,工件台采用真空吸附方式固定晶片,与θ轴一体安放在X轴运动导轨台上,X轴导轨带动工件台做往复运动。带动划片刀高速旋转的气浮主轴安放在Y导轨上,依单元晶片的尺寸大小随同Y导轨做进给切割运动。Z轴座在Y轴导轨上,随同Y轴运动,Z轴以杠杆结构方式带动高速主轴上下运动实现划片过程中的抬刀落刀功能,杠杆的一端为高速主轴,另一端为Z轴系统。 根据晶片加工质量要求,切片机必须实现下列主要指标及功能:

C第3章规范标准答案

C++习题参考答案 第1章面向对象程序设计概论 一、名词解释 抽象封装消息 【问题解答】 面向对象方法中的抽象是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程。 面向对象方法中的封装就是把抽象出来的对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。 消息是面向对象程序设计用来描述对象之间通信的机制。一个消息就是一个对象要求另一个对象实施某种操作的一个请求。 二、填空题 (1)目前有面向过程的结构化程序设计方法和面向对象的程序设计方法两种重要的程序设计方法。 (2)结构化程序设计方法中的模块由顺序、选择和循环3种基本结构组成。(3)在结构化程序设计方法中,程序可表示为程序=数据结构+算法;而面向对象的程序设计方法,程序可表示为程序=对象+消息。 (4)结构化程序设计方法中的基本模块是过程;而面向对象程序设计方法中的基本模块是类。 (5)面向对象程序设计方法具有抽象性、封装性、继承性和多态性等特点。 三、选择题(至少选一个,可以多选) (1)面向对象程序设计着重于( B )的设计。 A. 对象 B. 类 C. 算法 D. 数据 (2)面向对象程序设计中,把对象的属性和行为组织在同一个模块内的机制叫做( C )。 A. 抽象 B. 继承 C. 封装 D. 多态 (3)在面向对象程序设计中,类通过( D )与外界发生关系。 A. 对象 B. 类 C. 消息 D. 接口 (4)面向对象程序设计中,对象与对象之间的通信机制是( C )。 A. 对象 B. 类 C. 消息 D. 接口 (5)关于C++与C语言的关系的描述中,( D )是错误的。 A. C语言是C++的一个子集 B. C语言与C++是兼容的 C. C++对C语言进行了一些改进 D. C++和C语言都是面向对象的 【结果分析】 C语言是面向过程的。C++语言是一种经过改进的更为优化的C语言,是一种混合型语言,既面向过程也面向对象。 (6)面向对象的程序设计将数据结构与( A )放在一起,作为一个相互依存、不可分割的整体来处理。 A. 算法 B. 信息 C. 数据隐藏 D. 数据抽象 (7)下面( A )不是面向对象系统所包含的要素。 A. 重载 B. 对象 C. 类 D. 继承

LED封装工艺流程(精)

阐述LED 产品封装工艺流程 03、点胶 在LED 支架的相应位置点上银胶或绝缘胶。(对于GaAs 、SiC 导电衬底,具有背面电极的红光、黄光、黄绿芯片,采用银胶。对于蓝宝石绝缘衬底的蓝光、绿光LED 芯片,采用绝缘胶来固定芯片。) 06、自动装架 自动装架其实是结合了沾胶(点胶)和安装芯片两大步骤,先在LED 支架上点上银胶(绝缘胶),然后用真空吸嘴将LED 芯片吸起移动位置,再安置在相应的支架位置上。 自动装架在工艺上主要要熟悉设备操作编程,同时对设备的沾胶及安装精度进行调整。在吸嘴的选用上尽量选用胶木吸嘴,防止对LED 芯片表面的损伤,特别是兰、绿色芯片必须用胶木的。因为钢嘴会划伤芯片表面的电流扩散层。 07、烧结 烧结的目的是使银胶固化,烧结要求对温度进行监控,防止批次性不良。银胶烧结的温度一般控制在150℃,烧结时间2小时。根据实际情况可以调整到170℃,1小时。 绝缘胶一般150℃,1小时。 银胶烧结烘箱的必须按工艺要求隔2小时(或1小时)打开更换烧结的产品,中间不得随意打开。烧结烘箱不得再其它用途,防止污染。 08、压焊 压焊的目的将电极引到LED 芯片上,完成产品内外引线的连接工作。 LED 的压焊工艺有金丝球焊和铝丝压焊两种。右图是铝丝压焊的过程,先在LED 芯片电

极上压上第一点,再将铝丝拉到相应的支架上方,压上第二点后扯断铝丝。金丝球焊过程则在压第一点前先烧个球,其余过程类似。 压焊是LED 封装技术中的关键环节,工艺上主要需要监控的是压焊金丝(铝丝)拱丝形状,焊点形状,拉力。 对压焊工艺的深入研究涉及到多方面的问题,如金(铝)丝材料、超声功率、压焊压力、劈刀(钢嘴)选用、劈刀(钢嘴)运动轨迹等等。(下图是同等条件下,两种不同的劈刀压出的焊点微观照片,两者在微观结构上存在差别,从而影响着产品质量。)我们在这里不再累述。 09、点胶封装 LED 的封装主要有点胶、灌封、模压三种。基本上工艺控制的难点是气泡、多缺料、黑点。设计上主要是对材料的选型,选用结合良好的环氧和支架。(一般的LED 无法通过气密性试验)如右图所示的TOP-LED 和Side-LED 适用点胶封装。手动点胶封装对操作水平要求很高(特别是白光LED ),主要难点是对点胶量的控制,因为环氧在使用过程中会变稠。白光LED 的点胶还存在荧光粉沉淀导致出光色差的问题。 10、灌胶封装 Lamp-LED 的封装采用灌封的形式。灌封的过程是先在LED 成型模腔内注入液态环氧,然后插入压焊好的LED 支架,放入烘箱让环氧固化后,将LED 从模腔中脱出即成型。 11、模压封装 将压焊好的LED 支架放入模具中,将上下两副模具用液压机合模并抽真空,将固态环氧放入注胶道的入口加热用液压顶杆压入模具胶道中,环氧顺着胶道进入各个LED 成型槽中并固化。 12、固化与后固化

类的封装与继承习题(题)

1.以下关于继承的叙述正确的是( C )。 A、在Java中类只允许单一继承 B、在Java中一个类只能实现一个接口 C、在Java中一个类不能同时继承一个类和实现一个接口 D、在Java中接口只允许单一继承 2.有继承关系时用到的关键字是(A )。( 2 分) A:extend B:extends C:implements D:implement 3:Java变量中,以下不属于复合类型的数据类型是( D)。( 2 分) A:类 B:字符型 C:数组型 D:接口 4:java中定义数组名为abc,下面(B )可以得到数组元素的个数。( 2 分) A:abc.length( ) B:abc.length C:len(abc) D:ubound(abc) 5:下列说法正确的是(A )。( 2 分) A:编译后的Java源程序根据文件中定义的类和接口的个数产生相应个数的.class 字节码文件。 B:Java语言的源文件中不是任何地方都可以加注释的。 C:一个文件中可以有多个访问权限为public的类。 D:含有main()方法的类可以为public的类,也可以为其他类。 6:在调用构造函数时(C )( 2 分) A:子类可以不加定义就使用父类的所有构造函数 B:不管类中是否定义了何种构造函数,创建对象时都可以使用默认构造函数C:先调用父类的构造函数 D:先调用形参多的构造函数 7:Java与C/C++比较说法错误的是(D)。( 2 分) A:Java不提供goto语句,所以也就没指定goto作为关键字。

B:Java没有指针。 C:Java没有联合和结构 D:Java只有单继承没有多重继承。 8:若需要定义一个类域或类方法,应使用( B)修饰符。( 2 分) A:static B:package C:private D:public 9:下列说法( C)是正确的。( 2 分) A:程序执行到break语句是一定会结束所有的循环 B:程序执行到continue语句时会结束当前循环 C:break语句和continue语句都可以和标签协同使用 D:continue语句和break语句的作用相同 10:以下说法正确的是(D )。( 2 分) A:每个Java类都至少有一个构造方法,如果没有则机器自动生成一个默认的构造方法。 B:如果类里定义了一个或多个构造方法,那么java也提供默认的构造方法 C:每个Java类中用户必须定义至少一个构造方法。 D:以上都不对 11:对封装的理解正确的是(A )。( 3 分) A:封装就是把对象的属性和行为结合成一个独立的单位。 B:封装就是把对象完全隐蔽起来,不让外界访问。 C:封装性是一个使用问题。 D:封装和抽象是一回事。 12:对成员的访问控制保护最强的是(C )。( 3 分) A:public B:缺省 C:private D:protected

抽象、封装与类(二)

抽象、封装与类(二) 学生姓名:学号:专业班级: 实验类型:□验证□综合□设计□创新实验日期:实验成绩: 一、实验项目名称 抽象、封装与类(二) 二、实验目的 1、熟练掌握属性的定义和静态属性、最终属性的使用。 2、熟练掌握方法的定义和静态方法、抽象方法、最终方法的使用。 三、实验基本原理 在计算机技术的软件开发方法中所使用的抽象有两类:一类是过程抽象,另一类是数据抽象。 过程抽象将整个系统的功能划分为若干部分,强调功能完成的过程和步骤。面向过程的软件开发方法采用的就是这种抽象方法。数据抽象是与过程抽象不同的抽象方法,它把系统中需要处理的数据和这些数据上的操作结合在一起,根据功能、性质、作用等因素抽象成不同的抽象数据类型。每个抽象数据类型既包含了数据,也包括了针对这些数据的授权操作,是相对于过程抽象更为严格、也更为合理的抽象方法。 封装就是指利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型的内部,系统的其他部分只有通过包裹在数据外面的被授权的操作,才能够与这个抽象数据类型交流和交互。封装使得抽象数据类型对内成为一个结构完整,可自我管理、自我平衡、高度集中的整体;对外则是一个功能明确、接口单一、可在各种合适的环境下都能独立工作的右击的单元。 Java程序设计就是定义类的过程,但是Java程序中定义的类的数目和功能都是有限的,编程时还需要用到大量的系统定义好的类,即Java类库中的类。 类库是Java语言的重要组成部分。Java语言由语法规则和类库两部分组成,语法规则确定Java 程序的书写规范;类库,或称为运行时库,则提供了Java程序与运行的系统软件(JVM)之间的接口。系统定义的类虽然实现了许多常见的功能,但是用户程序仍然需要针对特定问题的特定逻辑来定义自己的类。用户程序定义自己的类有定义类头和定义类体两个步骤,其中类体又由属性(域)和方法组成。 四、主要仪器设备及耗材 计算机一台、my Eclipse软件 五、实验步骤 (1)打开My Eclipse,新建工程和类。分别输入本实验的代码。 (2)按照实验的需求,输入如下代码: 编写一程序,完成以下工作: 定义一个圆类Circle,成员变量有最终静态属性圆周率PI、半径radius,成员方法有自定义构造方法、获取半径getRadius()、修改半径updateRadius()、计算面积area() 。 再定义一个圆锥类Taper,成员变量有底bottom、高height,成员方法有自定义构造方法、获得底圆半径getBottomR()、修改底圆半径updateBottomR()、获得高getHeight()、修改高updateHeight()、计算体积volume()。 最后写一测试类,测试自定义圆类Circle、圆锥类Taper是否正确。 1、定义圆类Circle class Circle { static final double pi=3.1415926; private double radius;

2.抽象和封装

抽象和封装 0.英语单词 1.抽象 我们需要设计一个电子宠物系统,其中领养宠物功能的详细需求如下: 根据控制台提示,输入领养宠物的昵称; 根据控制台提示,输入领养宠物的类型,有两种选择:狗狗和企鹅; 如果选择狗狗,要选择狗狗的品种,有两种选择:?聪明的拉布拉多犬?或?中华田园犬?如果选择类型,选择企鹅的性别:?Q仔?或?Q妹?。 所领养宠物的健康值默认是100,表示非常健康。 所领养的宠物和主人的亲密度是0,表示和主人不熟。 在控制台打印宠物信息,包括昵称、健康值、亲密度、品种或性别,表示领养成功。 领养成功后主人可以和狗狗玩接飞盘的游戏,也可以让狗狗看家;如果领养的是企鹅,主人可以和企鹅一起游泳,也可以和企鹅玩过家家的游戏。 根据上面的描述,进行分析和设计,找出类,设计类;并画出类图! 分析: 1)先找简单名词 2)再找修饰性名词 3)然后找动词 4)优化 类图 抽象时遵循的原则: 属性、方法的设臵是为了解决业务问题的;

关注主要属性、方法; 如果没有必要、勿增加额外的类、属性和方法。 2.类的定义 生活中描述事物无非就是描述事物的属性和行为,如人有身高、体重等属性,有说话、打球等行为。 Java中用类(class)来描述事物也是如此,属性:对应类中的成员变量,行为对应类中的成员函数。 定义类其实就是定义类的成员:成员变量和成员函数。 实例Dog.java Penguin.java 3.成员变量和局部变量的区别: 成员变量定义在类中,在整个类中都可以被访问; 成员变量随着对象的创建而建立,存在于对象所在的堆内存中; 成员变量都有默认初始值。 局部变量定义在局部范围内(方法内、语句或语句块内); 局部变量存在于栈内存中,局部变量只在所在的范围内有效,超出作用范围,变量所占内存就会被释放; 局部变量没有默认值,必须初始化。 实例: 成员变量的初始值 引用数据类型null 基本数据类型 byte short int long 0 float double 0.0 char ‘’ boolean false 4.创建和使用对象 1)创建对象的语句Dog dog = new Dog(); Penguin penguin = new Penguin(); 2)对象的内存结构 3)调用属性对象名.属性名 4)调用方法对象名.方法名 实例:Test.java 5.使用final定义常量 实例:Dog.java和Penguin.java的改进

设备包装方案

设备包装方案 一、包装工程及设备概况 本项目需要包装的设备大小共计82台,设备最大重量为4吨,最大外形尺寸达到3米以上,部分设备属于高精密设备。本着既要保证设备搬迁过程中有效的安全防护,又要考虑到经济实用性的原则,本批设备按照其精密程度分别采用不同的包装方式进行包装: 栈板包装:栈板+雨布包裹 木箱包装:栈板+木箱封装 精密包装:栈板+防震垫层+木箱封装+真空包装 二、打包过程 1、根据机器脚底的高度,用木方垫高机器或用螺丝将机器与底脚固定机器与底脚板面形成一定的整体,螺丝或大铁钉将垫木方和底座连起来,使它们形成整体,再将机器放到底座相对应的位置上,四周夹固起来,用铁钉固紧,使设备不会前后左右移位。 2、对于需要作精密包装的设备,在设备底脚处按照设备重量,用10mm的橡胶衬垫,栈板上用珍珠棉铺垫后,再将设备安放在上面,用铝塑膜包裹后抽真空。然后用上述1的方式将设备固定在栈板上。 3、如果机器上有仪表玻璃等易碎部件,用填充物或海棉气泡垫拉护膜将垫起来,使运输过程中不会有损坏和擦伤现象。用气泡垫将设备包好,用铁皮和布带将设备和木箱底座拉牢固。遇到重型机械包装防止起吊时底座和墙板严重变形,采用槽钢和扁铁相互扣连。真空包装,机器尖部不能外露,否则在强大压力下真空袋会产生破裂而达不到真空效果,加橡皮密封加干燥剂。 4、封箱过程:机器整体和零件检查无误到得到客户允许,将木箱墙板按先后顺序组装起来,将谏板封好。 5、所有包装程序完成后,将包装箱常用标识喷于木箱墙板上面,如“防潮向上易碎”“重心”“起吊位置”等等。

三、主要包装材料的选择: 1、木材选用:按照本项目设备重及尺寸,可选用100*100mm的木方作为栈板的负荷骨架,端侧板支撑选用80*20mm木方作为夹板的加强支撑材料,底板、端侧板及盖板均选用7mm的优质夹板。 2、真空材料:真空包装选用0.12mm的纯铝塑膜复合膜,包装内按照每立方400克放置干燥剂。 3、紧固材料:考虑到本项目设备的精密程度及轻质,坚固带选择16mm的塑钢带作为坚固带。 4、其他材料:珍珠棉、护角、坚固螺、气泡膜、缠绕膜等包装辅助均选择国标材料。 四、作业注意事项 1、铝箔内严禁有任何穿孔、破洞。 2、固定及防撞角木禁止在铝箔袋内打钉施工。 3、设备边缘、突出物及锐角与仪表表面应以气泡护垫包覆保护。 4、在仪表及易碎之物品外侧需以红色及黄色胶带在内层PE包覆层上标示。 5、真空袋与底板、固定角木、天压角木接触位置应垫气泡护垫包覆以避免摩擦造成真空袋破损,真空失效。 6、如特殊情况需要在铝箔袋内施工时,木材要用PVC布包扎起来,打钉处要加垫5mm厚橡胶垫。

面向过程、面向对象、类、方法、事件、封装通俗理解

类的概念:类是具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。 对象的概念:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。从更抽象的角度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组服务的封装体。客观世界是由对象和对象之间的联系组成的。类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类。 类描述了一组有相同特性(属性)和相同行为(方法)的对象。上面大概就是它们的定义吧,也许你是刚接触面向对象的朋友,不要被概念的东西搞晕了,给你举个例子吧,如果你去中关村想买几台组装的PC 机,到了那里你第一步要干什么,是不是装机的工程师和你坐在一起,按你提供的信息和你一起完成一个装机的配置单呀,这个配置单就可以想象成是类,它就是一张纸,但是它上面记录了你要买的PC 机的信息,如果用这个配置单买10 台机器,那么这10 台机子,都是按这个配置单组成的,所以说这10 机子是一个类型的,也可以说是一类的。那么什么是对象呢,类的实例化结果就是对象,用这个配置单配置出来(实例化出来)的机子就是对象,是我们可以操作的实体,10 台机子,10 个对象。每台机子都是独立的,只能说明他们是同一类的,对其中一个机做任何动作都不会影响其它9 台机器,但是我对类修改,也就是在这个配置单上加一个或少一个配件,那么装出来的9 个机子都改变了,这是类对象的关系(类的实例化结果就是对象)。 就不说他的概念,如果你想建立一个电脑教室,首先要有一个房间,房间里面要有N 台电脑,有N 张桌子,N 把椅子,白板,投影机等等,这些是什么,刚才咱们说了,这就是对象,能看到的一个个的实体,可以说这个电脑教室的单位就是这一个个的实体对象,它们共同组成了这个电脑教室,那么我们是做程序,这和面向对象有什么关系呢?开发一个系统程序和建一个电脑教室类似,你把每个独立的功能模块抽象成类,形成对象,由多个对象组成这个系统,这些对象之间都能够接收信息、处理数据和向其它对象发送信息等等相互作用。就构成了面向对象的程序。 上面已经介绍过了,面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,所以我们首先要做的就是如何来声明类,做出来一个类很容易,只要掌握基本的程序语法定义规则就可以做的出来,那么难点在那里呢?一个项目要用到多少个类,用多少个对象,在那要定义类,定义一个什么样的类,这个类实例化出多少个对象,类里面有多少个属性,有多少个方法等等,这就需要读者通过在实际的开发中就实际问题分析设计和总结了。类的定义:class 类名{} 类呢?上面讲过来,使用类是为了让它实例出对象来给我们用,这就要知道你想要的是什么样的对象了,像上面我们讲的一个装机配置单上写什么,你装出来的机子就有什么。比如说,一个人就是一对象,你怎么把一个你看好的人推荐给你们领导呢?当然是越详细越好了:首先,你会介绍这个人姓名、性别、年龄、身高、体重、电话、家庭住址等等。然后,你要介绍这个人能做什么,可以开车,会说英语,可以使用电脑等等。只要你介绍多一点,别人对这个人就多一点了解,这就是我们对一个人的描述,现在我们总结一下,所有的对象我们用类去描述都是类似的,从上面人的描述可以看到,做出一个类来,从定义的角度分两部分,第一是从静态上描述,第二是从动态上描述,静态上的描述就是我们所说的属性,像上面我们看到的,人的姓名、性别、年龄、身高、体重、电话、家庭住址等等。动态

相关文档
最新文档