从ES4第一个版本发布到现在,已经有段时间了,绝大多数坛友都已经适应了ES4所带来的新封装模式,但仍有部分新人和坛友对ES4的两阶段模式带有不解或曲解。本帖将就ES4的两阶段意义做出解释说明,希望更多朋友能体会ES4两阶段模式的设计目的。


1、什么是封装

讨论问题之前,我们先来简单说说什么是封装。

其实“封装”这个词翻译的太过抽象了,而原词汇“Sysprep”却是一个很具象化的词语,原意是“将系统(sys)准备好(prep)”,换句话说,就是将系统设定为可以部署(deploy)的状态。

封装本身是个很简单的事情:
(1)对于WinXP/2003等NT5系统而言,需要从系统源盘工具中提取deploy工具包,提取其中sysprep.exe及相关程序文件,创建C:\Sysprep目录,并将sysprep.exe及相关文件复制到其中。执行C:\Sysprep\sysprep.exe,按照UI的提示说明进行操作,即可完成封装;
(2)对于Win7/8/2008/2012等NT6系统而言,封装更加简单,直接运行C:\Windows\system32\sysprep\sysprep.exe,按照UI的提示说明操作,即可完成封装。

所以“封装”并不复杂,真正麻烦和复杂的是我们所提出的各种各样的需求。例如我们需要增强系统部署范围,这样就要集成各种磁盘控制器驱动;我们需要更多接口,以调用自己所指定的程序(万能驱动、运行库、软件包、优化等);我们要压缩C盘软件节省体积,并于部署时释放;我们要让部署背景更好看,要在部署中显示更明确的进度等等。而正是我们的这些需求,令封装变的相当复杂,从而一定程度上降低了封装成功率和稳定性。

为了解决这个问题,通过反复的思考和实践,才诞生出了ES4的两步骤模式。


2、两阶段各自的目的

ES4的第一阶段,是针对系统做最基本的封装,将稳定的完成系统封装为首要目的。
<ignore_js_op> 
在第一阶段中,ES4专注于完成封装任务,不执行任何与封装无直接关系的操作。从而尽最大可能的维持系统封装稳定性和成功率。
第一阶段正常完成后,一个基本的具有可部署能力的系统就完成了。
可以在重启后立即进PE备份这个系统,得到的是一个具有基本可部署能力的系统映像。这个系统可用于部署,但部署范围和可拓展性受到了限制。

ES4的第二阶段,是针对系统做各项调整,将拓展系统支持范围、增加各种功能为首要目的。
<ignore_js_op> 
在第二阶段中,ES4专注于将系统调整至封装者所需要的样子,只执行调整操作。从而尽最大可能的使系统多样化,不影响封装。
第二阶段正常完成后,一个个性化的、具有广泛部署范围、多样化功能的系统就完成了。
可立即在PE下备份这个系统,得到的是一个具有强大部署能力的系统映像!

从而形成了,封装是封装、调整是调整的分治局面。这样不会因为一些系统调整而影响系统封装成功率与部署稳定性。


3、两阶段模式的额外福利

两阶段模式还带来了3个额外的好处:

(1)当发现问题时,可以更加明确的确定问题到底是出于“系统封装”还是“系统调整”
如果第一阶段完成后的映像根本没法正常部署,则问题出在第一阶段,即“系统封装”;
如果第一阶段完成后的映像可以正常部署,而第二阶段完成后的映像无法正常部署,则问题出在第二阶段,即“系统调整”。

(2)基于第一阶段映像,可多次尝试第二阶段,而不用重新封装
第二阶段有很多选项,当某些选项的设置有问题时,只需要恢复第一阶段映像,根据刚才的配置文件再次执行第二阶段即可。
这种情况下无需重新封装,更不会影响封装成功率。
但一定要注意我说的是“恢复第一阶段映像后再次执行第二阶段”,而不是执行了第二阶段再执行、再执行、多次执行,这样的后果是不可知的。

(3)PE下可以很好的规避系统权限
Windows的权限限制越来越严格,出于安全考虑很多操作无法在当前系统下完成,而封装却需要经常改动一些系统关键值,受制于权限,无法良好的完成。
而PE和你所封装的系统,可以说是两个完全不同的系统。在一个系统下修改另一个系统,可以说97%的条件下畅通无阻。
这样,我们就能更好的对系统进行调整,不必考虑目标系统权限问题,也不必在当前系统下关闭一些安全限制而承担不必要的风险。

(1)(2)均基于“完成第一阶段后立刻重启进PE,制作第一阶段映像”,切记!


4、其他问题

(1)第一阶段完成后什么时间进PE?
第一阶段完成后,系统就已经是一个进入了“准备部署”状态的系统了。此时重启请立刻进PE,并备份系统,准备开始第二阶段。
而在第一阶段完成重启后,没有进入PE,而从硬盘启动了系统,则系统就已经开始部署了,此时一切都晚了,已经部署了的系统,怎么执行第二阶段?
很多新人在这里蒙圈了,第一阶段执行完,重启部署执行完,才想起来进PE,进去之后ES4发现不了处于“准备状态”的系统。

(2)怎么在虚拟机下进PE?
能问出这个问题来,至少将证明你不是一个合格的技术员,你在技术的道路还有很长的路需要走。

以VMware虚拟机为例,虚拟机处于关闭状态时,找到“设备”。
选择第一个光驱(如果你的VM只设定了一个光驱,则选择那一个)
<ignore_js_op> 
弹出页面中,设定虚拟机光驱使用ISO映像,单击“浏览”按钮
<ignore_js_op> 
选中“U盘装机助理ISO版”的映像文件(再再再次提醒,请使用ISO版,而不是U盘!)
<ignore_js_op> 
进入虚拟机BIOS,将光驱设置为第一启动
<ignore_js_op> 
以此启动,即可看到PE的启动页面了。

(3)两阶段封装≠二次封装
两阶段封装,是指将封装分成两个阶段,分别执行封装和调整,从而提高成功率,加强稳定性。
二次封装,是指将封装后的系统进行部署,而后再次进行封装。
这是两个完完全全不相同的概念!请勿混淆!


好了,就说到这吧,仔细读完这篇文章,想必各位坛友对ES4的两阶段有了更多的认识。

两阶段封装是对系统封装的一种创新。系统封装从被开始研究至今,除了ES4之外的辅助工具都在使用一阶段封装方式,将系统调整与封装于同一时段执行。

当然,我不否认因为初次尝试两阶段,ES4的问题比以往要多些。在一个系统下(PE)修改另一个系统(所封装的系统)的内容,在对系统的操作方面,可以说以往的代码就统统不能用了,以往的很多功能需要进行大幅调整或彻底变更才能执行正常。这使的很多与之前看似相同的操作,实际操作的方法却大相径庭。

但即便如此,ES4尝试新方法、新思路的脚步也不会停止。两阶段的好处很明显,现在遇到了问题是因为对两阶段还不像一阶段那么成熟,毕竟一阶段已经被使用了10年有余,而两阶段自ES4起也就1年多时间!继续尝试、继续创新、继续完善,只是ES4要做的事情,一个好的思路,不能因为一时没有完善而放弃!

敢创新,才有未来!

[官方说明] 为什么ES4要分成两阶段?的更多相关文章

  1. 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究 转载

    1.XA XA是由X/Open组织提出的分布式事务的规范.XA规范主要定义了(全局)事务管理器(Transaction Manager)和(局部)资源管理器(Resource Manager)之间的接 ...

  2. 分布式事务、XA、两阶段提交、一阶段提交

    本文原文连接:http://blog.csdn.net/bluishglc/article/details/7612811 ,转载请注明出处! 1.XA XA是由X/Open组织提出的分布式事务的规范 ...

  3. XA: 事务和两阶段提交

    本文原文连接:http://blog.csdn.net/bluishglc/article/details/7612811 ,转载请注明出处! 1.XA XA是由X/Open组织提出的两阶段提交协议, ...

  4. MySQL binlog 组提交与 XA(两阶段提交)

    1. XA-2PC (two phase commit, 两阶段提交 ) XA是由X/Open组织提出的分布式事务的规范(X代表transaction; A代表accordant?).XA规范主要定义 ...

  5. MySQL binlog 组提交与 XA(两阶段提交)--1

    参考了网上几篇比较靠谱的文章 http://www.linuxidc.com/Linux/2015-11/124942.htm http://blog.csdn.net/woqutechteam/ar ...

  6. [官方作品] 关于ES4的设首页问题

    [官方作品] 关于ES4的设首页问题 Skyfree 发表于 2013-2-10 21:55:03 https://www.itsk.com/thread-254503-1-1.html 关于ES4设 ...

  7. MySQL binlog 组提交与 XA(分布式事务、两阶段提交)【转】

    概念: XA(分布式事务)规范主要定义了(全局)事务管理器(TM: Transaction Manager)和(局部)资源管理器(RM: Resource Manager)之间的接口.XA为了实现分布 ...

  8. 转载:mongodb的两阶段提交实战

    项目中用到了mongodb(3.x版本),业务上需要操作mongodb的多个collections,希望要么同时操作成功,要么回滚操作保持数据的一致性,这个实际上要求在mongodb上实现事务功能,在 ...

  9. mysql的两阶段协议(封锁定理,虫洞事务)

    我们都知道数据库的事务具有ACID的四个属性:原子性,一致性,隔离性和持久性.然后在多线程操作的情况下,如果不能保证事务的隔离性,就会造成数据的修改丢失(事务2覆盖了事务1的修改结果).读到脏数据(事 ...

随机推荐

  1. c#取得控制台应用程序根目录

    1.取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径方法2.AppDomain.CurrentDomain.Bas ...

  2. [AaronYang]C#人爱学不学[3]

    本文章不适合入门,只适合有一定基础的人看.我更相信知识细节见高低,我是从4.0开始学的,终于有时间系统的学习C#5.0,是5.0中的知识,会特殊标记下.但写的内容也可能含有其他版本framework的 ...

  3. 第四十六课:MVC和MVVM的开发区别

    实现MVC的目的就是为了让M和V相分离.前端的MVC无法做到View和Model的相分离,而MVVM可以. 我们先来看一个用MVC模式开发的经典例子:(一定要深入了解这种开发的思想,而不是看懂代码) ...

  4. 转-JS子窗口创建父窗口操作父窗口

    Javascript弹出子窗口  可以通过多种方式实现,下面介绍几种方法 (1) 通过window对象的open()方法,open()方法将会产生一个新的window窗口对象 其用法为: window ...

  5. iOS边练边学--多线程介绍、NSThread的简单实用、线程安全以及线程之间的通信

    一.iOS中的多线程 多线程的原理(之前多线程这块没好好学,之前对多线程的理解也是错误的,这里更正,好好学习这块) iOS中多线程的实现方案有以下几种 二.NSThread线程类的简单实用(直接上代码 ...

  6. 【BZOJ 2002】【Hnoi 2010】弹飞绵羊 分块||Link Cut Tree 两种方法

    ShallWe,Yveh,hmy,DaD3zZ,四人吃冰糕从SLYZ超市出来后在马路上一字排开,,,吃完后发现冰糕棍上写着:“向狮子座表白:愿做你的小绵羊”,,, 好吧在这道题里我们要弹飞绵羊,有分块 ...

  7. SQL注入备忘单

    Find and exploit SQL Injections with free Netsparker SQL Injection Scanner SQL Injection Cheat Sheet ...

  8. xml_MathML的基本知识点__这东西要自己实践最好

    1 : <mi> 一般的字符串 2: <mo> 操作字符串 <mo> ( </mo> <mo>∑</mo> 3:<mn&g ...

  9. Java基础-内部类-为什么成员内部类可以无条件访问外部类

    在此之前,我们已经讨论过了成员内部类可以无条件访问外部类的成员,那具体究竟是如何实现的呢?下面通过反编译字节码文件看看究竟.事实上,编译器在进行编译的时候,会将成员内部类单独编译成一个字节码文件,下面 ...

  10. 学习笔记--博弈组合-SG函数

    fye学姐的测试唯一的水题.... SG函数是一种游戏图每个节点的评估函数 具体定义为: mex(minimal excludant)是定义在整数集合上的操作.它的自变量是任意整数集合,函数值是不属于 ...