2008-04-13

Internet Explorer 8 Beta 1 简体中文版下载

Internet Explorer 8 beta1 简体中文版下载主页: http://www.microsoft.com/china/windows/products/winfamily/ie/ie8/getitnow.mspx
Internet Explorer 8 Beta 1 for Windows Vista 和 Windows Server 2008 简体中文版: http://download.microsoft.com/download/1/6/6/1660dc85-4958-4b32-84ec-0c3be6b235c8/IE8-WindowsVista-x86-CHS.exe
Internet Explorer 8 Beta 1 for Windows XP SP2 简体中文版: http://download.microsoft.com/download/7/a/4/7a4b44ff-1e97-40fe-af08-33a819ccea77/IE8-WindowsXP-x86-CHS.exe
Windows Internet Explorer 8 Beta 1 for Windows Server 2003 SP2 简体中文版:http://download.microsoft.com/download/a/2/8/a280b20e-7e03-467e-909a-da390e726262/IE8-WindowsServer2003-x86-CHS.exe
以上是x86版本

2008-04-04

咖啡因能保护大脑

BBC的报道,每天从一杯咖啡中摄入的咖啡因就可帮助预防痴呆,咖啡因能阻挠胆固醇对人体造成的伤害。

美国科学家的研究显示饮用咖啡能降低患上阿尔茨海默氏症的风险(至少是对兔子而言)。英国的专家则称它是至今最好的证明咖啡益处的证据。

“脑血管障壁”是大脑中保护中央神经系统免受血液携带的化学物质伤害的过滤器,胆固醇水平越高,障壁就越容易渗漏。科学家对兔子的实验显示咖啡是一种有效的胆固醇中和剂。

Silverlight技巧,诀窍,教程和链接

入门教程


  • Silverlight 2 初览: 我建议先读这个贴子,如果你正考虑开始Silverlight 2开发的话。该文不仅对Silverlight 2提供的功能做了高层次的描述,还链接到了一个八个贴子的系列教程,该教程对如何建造一个Digg客户端例程做了示范。这些教程贴子对Silverlight 2和WPF开发的概念提供了很好的介绍。


  • Unit Testing with Silverlight 2: Silverlight开发团队的Jeff Wilcox有一篇精彩贴子,讨论如何使用Silverlight SDK中的单元测试框架单元测试Silverlight 2应用。

入门讲座


  • 我的Silverlight入门讲座: 你可以下载我最近在亚利桑那做的“Silverlight 2入门”讲座的讲义和示范例程,请随意在你自己的讲座中重用这些讲义。

文档链接

教程和例程


  • Using Deep Zoom with Silverlight 2: Jacek Ciereszko有一个很好的博客贴子,描述了如何使用Silverlight 2的 “Deep Zoom”功能实现跟Hard Rock例程类似的图像放大功能。

部署体验

控件模板

ListBox和ScrollViewer场景

DataGrid场景


  • Using Silverlight 2's DataGrid with WCF + LINQ to SQL: 这个15分钟的录像博客示范了如何在服务器上建造一个LINQ to SQL对象模型,然后用WCF将其发布,然后示范了如何建造一个使用了新的Silverlight DataGrid控件的Silverlight客户端,该客户端调用WCF服务获取LINQ to SQL数据,将其绑定到DataGrid上。


  • Simple Editing of Web Service Data in a DataGrid: Mike Taulty有一篇好贴,展示如何在服务器上建造WCF服务,然后从Silverlight 2客户端使用它来获取数据,绑定到DataGrid,允许用户更新数据行,添加/删除数据行,然后使用 Silverlight 2 Beta1将数据保存到服务器上。


  • Sorting with Silverlight 2's DataGrid Control: Silverlight 2 Beta1中的DataGrid控件还没有内置的列数据排序支持(将在Beta2中提供),但这并没有阻止Matt Berseth! 在这个贴子里,他展示了如何使用一个定制的header列方法来实现排序。也看一下Matt的 这里的贴子,该文提供了一个DataGrid测试页面,展示了目前DataGrid的若干特性。

Web Services 和 Networking


  • Web Services and Silverlight: 这个有用的贴子讨论了如何在Silverlight中使用web服务,并且提供了相关快速入门例程和文档的链接。

Video场景

Accessibility 和 508相容性


  • Accessibility in Silverlight 2: Silverlight开发团队的Mark Rideout讨论 Silverlight 2 中的accessibility支持,以及如何使用Silverlight建造与section 508相容的accessible方案。

文章摘自 http://blog.joycode.com/scottgu/archive/2008/04/04/115048.aspx

Boot Manager 时代的多重引导 -Windows Vista RTM 与 Windows Vista SP1/Server 2008 共存的安装顺序

众所周知,从 Windows Vista 开始,Windows 操作系统的启动管理器采用了全新的 Boot Manager + BCD,取代了 Windows 2000/XP/Server 2003 一贯采用的 NTLDR + BOOT.INI。Boot Manager 不仅可以管理 Windows Vista 的启动,也可以通过自身将启动控制权移交给 NTLDR、管理 Windows 2000/XP/Server 2003 的启动。换言之,在 Boot Manager 的帮助下,我们既可以配置多个 Windows Vista 彼此之间的共存、也可以配置 Windows Vista 与 Windows 2000/XP/Server 2003 的共存

凡是配置过多重操作系统的朋友都知道,安装多重操作系统应该本着“先低后高”的顺序进行,如果按照“先高后低”的顺序反其道行之,就容易引起高版本的操作系统无法启动的故障。例如,在配置 Windows Vista 与 Windows 2000/XP/Server 2003 的共存时,应该先安装 Windows 2000/XP/Server 2003、后安装 Windows Vista;如果我们反其道行之,Windows Vista 就会失去引导能力,届时我们必须手动恢复 Boot Manager、重建 BCD 才可以修复两者的共存

而在多个 Windows Vista 彼此之间共存的例子上,这个问题就无所谓了,因为在 Windows Vista SP1/Server 2008 发布之前,Windows Vista 只有 RTM 6.00.16386 这个唯一的版本,Boot Manager 也只有 16386 这个唯一的版本。无论我们先安装哪个 Windows Vista、后安装哪个 Windows Vista,Boot Manager 都将是 16386 的版本,因此我们无需考虑安装顺序的问题

最近,随着 Windows Vista SP1/Server 2008 的发布,Boot Manager 的版本也随着 Windows Vista SP1/Server 2008 一起提升到了 6.01.18000。既然 Boot Manager 的版本不再唯一,它已经有了 16386、18000 两种版本,会不会对多重操作系统的配置带来影响呢?笔者特意针对这个问题进行了一次测试。这次测试得到了微软工程师 Perry Gu 的大力帮助,在此向 Perry Gu 表示感谢。

(注:由于 Windows Vista SP1 与 Server 2008 的版本号都是 6.01.18000,为了叙述方便,笔者下面将这两个系统统称为 Windows 18000,而将 Windows Vista RTM 称为 Windows 16386)

笔者的疑问:

如果我们按照“先高后低”的顺序配置 Windows 18000 与 Windows 16386 的共存。那么当我们安装 Windows 16386 时,原先 Windows 18000 已经安装在硬盘中的 18000 版的 Boot Manager 会不会被 Windows 16386 降级为 16386 版本的 Boot Manager

参考信息:在 NTLDR 时代,这个问题的答案是会。例如假设我们已经安装了 Windows XP、现在又开始安装 Windows 2000,那么 Windows 2000 安装程序就会用自己的 NTLDR 取代 Windows XP 已经安装在硬盘中的 NTLDR,造成 NTLDR 版本降级。因此,当 Windows 2000 安装好之后,虽然多重启动菜单已经自动生成,但 Windows XP 却是无法启动的。此时必须再将 NTLDR 手动恢复为 Windows XP 的版本,才能令 Windows XP 恢复启动

正是因为按照“先高后低”的顺序安装会引起 NTLDR 被降级,因此 NTLDR 从 Windows XP SP2 开始新增加了版本检测功能。在 Windows XP SP2 以上的版本中(例如配置 Windows XP SP2 与 Windows Server 2003 的共存),如果安装程序检测到用户按照“先高后低”顺序安装了多重系统,就会自动阻止 NTLDR 被降级

笔者的疑问就是:Boot Manager 是不是也继承了这一特性?如果安装程序发现我先安装了 Windows 18000、后安装了 Windows 16386,会不会自动阻止 Boot Manager 被降级呢?

经过一番测试,笔者发现 Boot Manager 确实继承了这一特性。当笔者先安装好了 Windows 18000、后安装了 Windows 16386 时,多重系统共存可以自动形成,Windows 18000 的启动也没有受影响。换言之,Boot Manager 没有被降级。

笔者的结论:

在配置任何多重操作系统共存时本着“先低后高”的顺序安装,这个大原则本身是没有错的。只不过由于高版本的 NTLDR(Windows XP SP2 以上版本)及 Boot Manager 均增加了阻止自身被降级的功能,所以,假如我们配置的多重操作系统是两个采用了相同的启动管理器的系统,就可以不用考虑“先低后高”的顺序、按照“先高后低”的顺序安装也无所谓了。例如,假如我们配置的是 Windows 18000 与 Windows 16386 的共存(两者的启动管理器都是 Boot Manager)、或者配置的是 Windows XP SP2 与 Windows Server 2003 的共存(两者的启动管理器都是 NTLDR),那么即使按照“先高后低”的顺序安装也无妨(当然,Windows 2000 例外,因为它尚不支持阻止自身被降级的功能)。

但是,假如我们配置的多重操作系统是两个启动管理器不相同的系统,那么就必须严格按照“先低后高”的顺序安装,否则高版本的系统将肯定无法启动。例如,当我们配置 Windows Vista/Vista SP1/Server 2008 与 Windows 2000/XP/Server 2003 的共存时,如果按照“先高后低”的顺序安装,Windows Vista/Vista SP1/Server 2008 将肯定无法启动。此时必须手动修复 Boot Manager、重建 BCD 才能恢复多系统共存

最后,笔者再重复一遍如何修复按照“先高后低”顺序配置的 Windows Vista/Vista SP1/Server 2008 与 Windows 2000/XP/Server 2003 的共存。这个问题在微软新闻组及微软技术论坛中已经被问过 N 遍了。在此我们假设首先在 C 盘安装了 Windows Vista、然后又在 D 盘安装了 Windows XP。

修复步骤:

1.首先恢复 Boot Manager 的引导。以 Windows Vista 安装光盘直接启动计算机,进入安装程序后选择“修复计算机”-“命令提示符”,在命令提示符中执行 BOOTREC /REBUILD 或者 BOOTSECT -NT60 ALL 命令。这两个命令效果是相同的,用哪个都可以。

2.重新建立 BCD。在命令提示符中执行 BOOTREC /REBUILDBCD 命令,可以重新检测硬盘中所有已存在的 Windows Vista/Server 2008 系统,并自动将其重新添加到新生成的 BCD 中。

3.由于 BOOTREC /REBUILDBCD 命令只能检测 Windows Vista/Server 2008、不能检测 Windows XP,因此我们必须手动将 Windows XP 重新添加到 BCD。否则的话,Boot Manager 启动菜单就会只显示 Windows Vista、不显示 Windows XP。手动添加 Windows XP 的步骤是通过命令提示符依次执行下列命令:

BCDEDIT -CREATE {NTLDR} -D "早期版本的 Windows"
(注:引号中的内容为注释,可以随意)

BCDEDIT -SET {NTLDR} DEVICE PARTITION=C:
(注:C: 是指 NTLDR 所在的硬盘活动分区,但不一定是 Windows XP 所在的分区,因为 Windows XP 可能没有安装在活动分区,例如在本例中,活动分区是 C:、但 Windows XP 却安装在 D:)

BCDEDIT -SET {NTLDR} PATH\NTLDR

BCDEDIT -DISPLAYORDER {NTLDR} -ADDLAST

这样即可将 Windows XP 重新添加到 BCD,恢复 Windows Vista 与 Windows XP 的多重启动菜单。

文章摘选自 Alexis Zhang's Blog

制作Windows XP系统补丁自安装光盘

一、定制下载系统补丁

以Windows XP中文专业版系统为例,下面介绍3种操作性强、具有代表性的方法,可以根据具体情况灵活选择使用。

方法1:在开始菜单中点击"Windows Update"项,进入微软升级站点,点击"查看以寻找更新"来刷新可用补丁列表,之后点击"复查并安装更新",选择需要升级的补丁,接着点击"立即安装",当下载进度条开始增加后,即可选择"取消"。进入Windows系统的安装目录,找到并打开Windows Update.log文件,在其中搜索后缀名为exe的关键词,即可看到补丁文件的下载网址。如:http://download.windowsupdate.com/msdownload/update/ KB837009.exe,将该补丁下载地址复制在记事本中,每一行单列一个下载网址,保存为windows_update.lst的文件格式。运行FlashGet软件,通过导入列表的方式将该文件读入,即可开始下载补丁文件。

(小提示:用这种方法可以轻而易举地找到系统补丁的下载网址,但系统升级补丁是分多次进行的,每次安装完后还要重新启动系统,所以,我们可以先把补丁下载回来后进行安装,再重启系统,接着用同样的方法继续后面的补丁下载过程,直到将所有的补丁下载完毕。)

方法2:如果不想花太多时间在寻找补丁下载网址上,可以找一台已打过全部Windows XP系统补丁的电脑,同样在该电脑的Windows安装目录下找到Windows Update.log文件,查到所有系统补丁的实际下载网址,最后按方法1中的操作,一次性将所有的系统补丁一网打尽,保存在硬盘上。

方法3:安装好Windows XP系统后,访问微软Windows Update网站,点击"查看以寻找更新"→"复查并安装更新",在这里记下每一个补丁文件的KB编号,取后面的6位数字,例如KB837009等。在IE浏览器地址栏中输入以下网址http://support.microsoft.com/?kbid=,在该网址后加上补丁文件的6位数编号,进入该补丁的微软知识库界面,点击该补丁的安全公告链接,之后在安全公告页面可以看到提示"下载此更新"的链接,点击该链接可转到该补丁文件的下载页,这时就可以点击"下载"按钮调用FlashGet下载该补丁。利用同样的方法将所有补丁下载回来。

二、创建补丁自动安装盘

1.准备工作

在硬盘的某个分区建立一个xp_patch目录,比如E盘,将下载的所有补丁文件复制到该目录下,确保该目录下的补丁文件是属于Windows XP中文专业版的,可对照Windows Update网站中的补丁下载列表进行核对。

安装补丁时需要安装参数,一般补丁文件的安装参数有3种不同的形式:

KB类补丁文件,其后要加/quiet /norestart /o的安装参数,分别表示安装时无需用户参与、安装完成后不重启、不提示覆盖OEM文件。

Q类补丁文件,其后要加/q /o /z安装参数,分别表示安装时无需用户干预、不提示覆盖OEM文件、安装完后不重新启动。

带有如图6所示图标的补丁文件其后只需加/q安装参数就可以了,表示安装时无需用户进行干预。

(小提示:要知道某个补丁文件的安装参数,可进入命令行窗口,在命令行状态下输入补丁文件名加/?参数,其格式如:"KB823980/?"、"Q315403/?",即可查询到详细的安装信息说明。接下来,可以用前面介绍的方法,按照Windows Update网站的补丁下载列表顺序,对每一个补丁文件进行单独查询,得到其对应的安装参数,这样可以避免安装过程中因为参数使用有误而造成系统补丁安装失败。)

2、编写脚本文件

创建一个Windows脚本命令文件,命名为xp_patch.cmd,按下面的格式输入安装参数命令,补丁安装的顺序要参照Windows Update网站的补丁下载列表进行排列。

CLS

@echo off
echo 准备安装 Windows Update 补丁程序
echo
echo 正在安装 Q307869
start /wait Q307869.exe /q /z /o
echo
echo 正在安装 冲击波安全更新程序
start /wait KB823980.exe /q /z /o
echo
echo 正在安装 KB824141
start /wait KB824141.exe /quiet /norestart /o
echo
……
echo 补丁已经安装完毕,请重启系统!
echo
Pause
EXIT

这里的start /wait命令表示正在安装系统补丁程序,并等待安装结束,输入每行命令后要回车,上文中只列出了部分补丁的安装命令,大家可将全部补丁配合安装命令依次加入即可。

3、刻录使用

下面以Nero 5.5.7.2版刻录软件为例制作补丁安装盘,启动Nero后选择"文件"→"新建",在弹出的"新建编译"窗口中选择左边的"只读CD(启动)"→"创建一个刻录任务",单击"新建"按钮,进入主界面,在"文件浏览器"窗口中选中h:xp_path文件夹,将其拖放到ISO1窗口中(如图8)。最后,单击文件菜单中的"写入光盘"项,在对话框中单击"写入"按钮,Nero软件就开始依次将启动信息、系统补丁文件写入光盘。

这样在以后重装系统后,只要将制作好的补丁安装盘放入光驱中,运行其中的xp_patch.cmd文件,即可按预设的解压缩安装格式,自动安装光盘上的系统补丁了。如果你没有刻录机,也没有关系,只要运行保存在硬盘上的xp_patch.cmd文件,也一样可以达到升级系统补丁的目的。

使用360安全卫士下载漏洞补丁,竟然达到80多个,然而每次重装系统都得重新下载,也可不这样,因为补丁就在360safe文件家里,hotfix,但仍然有一个问题,80多个补丁一个接一个的安装,太费事,有时点着点着就忘了该点哪个了。

下面有一个解决方案:

将hotfix文件夹拷出来,放到D:\下面,

开始-〉运行 cmd ,进入命令行,输入D:进入d盘,cd hotfix进入hotfix文件夹,再:

dir /a /b >list.txt

这样就利用了DOS的重定向将该文件夹中的补丁程序列表列入list.txt

在list.txt文件,去掉list.txt,msjavwu.exe

压Ctrl+H,把WindowsXP字串全部替换为start /wait windowsXP

把.exe全部替换为.exe /quiet /passive /norestart

最后加上exit

另保存list.bat,双击就开始无声安装,之后重启一次就OK了

关于start命令,在命令行中写入start /? 就可以看到了

start /? >start_help.txt

启动另一个窗口运行指定的程序或命令。

START ["title"] [/Dpath] [/MIN] [/MAX] [/SEPARATE /SHARED]
[/LOW /NORMAL /HIGH /REALTIME /ABOVENORMAL /BELOWNORMAL]
[/WAIT] [command/program]
[parameters]

"title" 在窗口标题栏中显示的标题。

path 起始目录

B 在不创建新窗口的情况下开始应用程序。 除非

启动 ^C 处理,否则该应用程序会忽略 ^C 处理;

^Break 是唯一可以中断该应用程序的方式

I 新环境是传递给 cmd.exe 的原始环境,

而不是当前环境

MIN 开始时窗口最小化

MAX 开始时窗口最大化

SEPARATE 在分开的空间内开始 16 位 Windows 程序

SHARED 在分共享的空间内开始 16 位 Windows 程序

LOW 在 IDLE 优先级类别开始应用程序

NORMAL 在 NORMAL 优先级类别开始应用程序

HIGH 在 HIGH 优先级类别开始应用程序

REALTIME 在 REALTIME 优先级类别开始应用程序

ABOVENORMAL 在 ABOVENORMAL 优先级类别开始应用程序

BELOWNORMAL 在 BELOWNORMAL 优先级类别开始应用程序

WAIT 启动应用程序并等候它结束

command/program

如果是内部 cmd 命令或批文件,那么该命令处理器是

用 /K 命令行开关运行 cmd.exe 的。这表示该窗口在命令运行

后仍然存在。

如果不是内部 cmd 命令或批文件,则是一个程序,并作为窗口应用程序或控制台应用程序运行。

parameters 这些为传送到命令/程序的参数

关于XP补丁的安装参数也可以通过上述方法看到

下面是我的list.bat的内容

echo 开始安装Windows XP 的漏洞补丁,补丁来源于360安全卫士

start "Windows XP Pack: 1" /wait IE7-KB928090-WindowsXP-x86-chs.exe /passive /norestart

start "Windows XP Pack: 2" /wait IE7-KB929969-WindowsXP-x86-chs.exe /passive /norestart

start "Windows XP Pack: 3" /wait IE7-WindowsXP-KB931768-x86-chs.exe /passive /norestart

start "Windows XP Pack: 4" /wait WindowsMedia-KB911564-x86-CHS.exe /passive /norestart

start "Windows XP Pack: 5" /wait WindowsMedia6-KB925398-x86-CHS.exe /passive /norestart

start "Windows XP Pack: 6" /wait WindowsXP-KB873339-x86-CHS.exe /passive /norestart

start "Windows XP Pack: 7" /wait WindowsXP-KB885835-x86-CHS.exe /passive /norestart

2008-04-03

如何使用robots.txt

如何使用robots.txt
2008年4月2日 下午 07:09:00

发表者:发表者: 马超, 石仁赫
转载自谷歌中文网站管理员博客

robots.txt 文件对抓取网络的搜索引擎漫游器(称为漫游器)进行限制。这些漫游器是自动的,在它们访问网页前会查看是否存在限制其访问特定网页的 robots.txt 文件。如果你想保护网站上的某些内容不被搜索引擎收入的话,robots.txt 是一个简单有效的工具。这里简单介绍一下怎么使用它。

如何放置 Robots.txt 文件

robots.txt自身是一个文本文件。它必须位于域名的根目录中并 被命名为"robots.txt"。位于子目录中的 robots.txt 文件无效,因为漫游器只在域名的根目录中查找此文件。例如,http://www.example.com/robots.txt 是有效位置,http://www.example.com/mysite/robots.txt 则不是。

这里举一个robots.txt的例子:

User-agent: *

Disallow: /cgi-bin/

Disallow: /tmp/

Disallow: /~name/

使用 robots.txt 文件拦截或删除整个网站

要从搜索引擎中删除您的网站,并防止所有漫游器在以后抓取您的网站,请将以下 robots.txt 文件放入您服务器的根目录:

User-agent: *
Disallow: /

要只从 Google 中删除您的网站,并只是防止 Googlebot 将来抓取您的网站,请将以下 robots.txt 文件放入您服务器的根目录:

User-agent: Googlebot
Disallow: /

每个端口都应有自己的 robots.txt 文件。尤其是您通过 http 和 https 托管内容的时候,这些协议都需要有各自的 robots.txt 文件。例如,要让 Googlebot 只为所有的 http 网页而不为 https 网页编制索引,应使用下面的 robots.txt 文件。

对于 http 协议 (http://yourserver.com/robots.txt):

User-agent: *
Allow: /

对于 https 协议 (https://yourserver.com/robots.txt):

User-agent: *
Disallow: /

允许所有的漫游器访问您的网页

User-agent: *
Disallow:

(另一种方法: 建立一个空的 "/robots.txt" 文件, 或者不使用robot.txt。)

使用 robots.txt 文件拦截或删除网页

您可以使用 robots.txt 文件来阻止 Googlebot 抓取您网站上的网页。 例如,如果您正在手动创建 robots.txt 文件以阻止 Googlebot 抓取某一特定目录下(例如,private)的所有网页,可使用以下 robots.txt 条目:

User-agent: Googlebot
Disallow: /private

要阻止 Googlebot 抓取特定文件类型(例如,.gif)的所有文件,可使用以下 robots.txt 条目:

User-agent: Googlebot
Disallow: /*.gif$

要阻止 Googlebot 抓取所有包含 ? 的网址(具体地说,这种网址以您的域名开头,后接任意字符串,然后是问号,而后又是任意字符串),可使用以下条目:

User-agent: Googlebot
Disallow: /*?

尽管我们不抓取被 robots.txt 拦截的网页内容或为其编制索引,但如果我们在网络上的其他网页中发现这些内容,我们仍然会抓取其网址并编制索引。因此,网页网址及其他公开的信息,例如指 向该网站的链接中的定位文字,有可能会出现在 Google 搜索结果中。不过,您网页上的内容不会被抓取、编制索引和显示。


作为网站管理员工具的一部分,Google提供了robots.txt分析工具 。它可以按照 Googlebot 读取 robots.txt 文件的相同方式读取该文件,并且可为 Google user-agents(如 Googlebot)提供结果。我们强烈建议您使用它。 在创建一个 robots.txt 文件之前,有必要考虑一下哪些内容可以被用户搜得到,而哪些则不应该被搜得到。 这样的话,通过合理地使用 robots.txt , 搜索引擎在把用户带到您网站的同时,又能保证隐私信息不被收录。

Web网站的性能测试工具

  随着Web 2.0技术的迅速发展,许多公司都开发了一些基于Web的网站服务通常在设计开发Web应用系统的时候很难模拟出大量用户同时访问系统的实际情况,因此,当Web网站遇到访问高峰时,容易发生服务器响应速度变慢甚至服务中断。为了避免这种情况,需要一种能够真实模拟大量用户访问Web应用系统的性能测试工具进行压力测试,来测试静态HTML页面的响应时间,甚至测试动态网页(包括ASP、PHP、JSP等)的响应时间,为服务器的性能优化和调整提供数据依据。
  我推荐各位Web 2.0开发测试人员使用Microsoft 的Web Application Stress Tool这个工具软件,这个微软提供的小工具仅9.58M,很小巧且实用。虽然功能上比不了专业的LoadRunner,但LoadRunner体积庞大,价格不菲,一般的企业也不会花那么多钱去购买LoadRunner,而微软的WAS则是完全免费,并且主要的功能都有,够用就行。
  Microsoft Web Application Stress Tool能有效测试一个网站的负载性能,这个软件可以通过脚本模拟100个强并发用户的访问,并模拟实际用户的一些点击操作,WAS还可以连接上远程Windows网站服务器的性能计数器(Performance Counter),通过对服务器性能(CPU/内存等)的性能分析来找到系统的瓶颈。CPU使用百分比反映了处理器开销,CPU使用百分比持续地超过75%是性能瓶颈在于处理器的一个明显的迹象。
  每次测试运行结束后WAS会生成详细的报表,WAS报表可以从View菜单选择Reports查看。
  另外,CSDN也总结了一些其他的测试工具,包括性能测试工具和功能测试工具,前十大测试工具排名如下:
  业级自动化测试工具WinRunner
  Mercury Interactive公司的WinRunner是一种企业级的功能测试工具,用于检测应用程序是否能够达到预期的功能及正常运行。通过自动录制、检测和回放用户的应用操作,WinRunner能够有效地帮助测试人员对复杂的企业级应用的不同发布版进行测试,提高测试人员的工作效率和质量,确保跨平台的、复杂的企业级应用无故障发布及长期稳定运行。
  工业标准级负载测试工具Loadrunner
  LoadRunner 是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner 能够对整个企业架构进行测试。通过使用LoadRunner ,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。
  全球测试管理系统testdirector
  TestDirector 是业界第一个基于Web的测试管理系统,它可以在您公司内部或外部进行全球范围内测试的管理。通过在一个整体的应用系统中集成了测试管理的各个部分,包括需求管理,测试计划,测试执行以及错误跟踪等功能,TestDirector极大地加速了测试过程。
  功能测试工具Rational Robot
  IBM Rational Robot 是业界最顶尖的功能测试工具,它甚至可以在测试人员学习高级脚本技术之前帮助其进行成功的测试。它集成在测试人员的桌面 IBM Rational TestManager 上,在这里测试人员可以计划、组织、执行、管理和报告所有测试活动,包括手动测试报告。这种测试和管理的双重功能是自动化测试的理想开始。
  单元测试工具xUnit系列
  目前的最流行的单元测试工具是xUnit系列框架,常用的根据语言不同分为JUnit(java),CppUnit(C++),DUnit (Delphi ),NUnit(.net),PhpUnit(Php )等等。该测试框架的第一个和最杰出的应用就是由Erich Gamma (《设计模式》的作者)和Kent Beck(XP(Extreme Programming)的创始人 )提供的开放源代码的JUnit.
  功能测试工具SilkTest
  Borland SilkTest 2006属于软件功能测试工具,是Borland公司所提出软件质量管理解决方案的套件之一。这个工具采用精灵设定与自动化执行测试,无论是程序设计新手或资深的专家都能快速建立功能测试,并分析功能错误。
  性能测试工具WAS
  Microsoft Web Application Stress Tool 是由微软的网站测试人员所开发,专门用来进行实际网站压力测试的一套工具。透过这套功能强大的压力测试工具,您可以使用少量的Client端计算机仿真大量用户上线对网站服务所可能造成的影响。
  自动化白盒测试工具Jtest
  Jtest是parasoft公司推出的一款针对java语言的自动化白盒测试工具,它通过自动实现java的单元测试和代码标准校验,来提高代码的可靠性。parasoft同时出品的还有C++ test,是一款C/C++白盒测试工具。
  功能和性能测试的工具JMeter
  JMeter是Apache组织的开放源代码项目,它是功能和性能测试的工具,100%的用java实现。
  性能测试和分析工具WEBLODE
  webload是RadView公司推出的一个性能测试和分析工具,它让web应用程序开发者自动执行压力测试;webload通过模拟真实用户的操作,生成压力负载来测试web的性能。
转载自月光博客

通过修改hosts文件可以正常访问Google的一些服务

  通过修改hosts文件可以正常访问Google的这些服务,修改的方法是:使用记事本编辑WINDOWS\system32\drivers\etc\hosts文件,在hosts文件中添加如下几行,即可访问Google的一些服务了。

209.85.135.100 toolbar.google.com
209.85.135.100 tools.google.com
209.85.135.100 dl.google.com
209.85.167.91 picasaweb.google.com
209.85.167.91 picasaweb.l.google.com

创业者的十大优秀特质

1、强烈的欲望


“欲”,实际就是一种生活目标,一种人生理想。创业者的欲望与普通人欲望的不同之处在于,他们的欲望往往超出他们的现实,往往需要打破他们现在的立足点,打破眼前的樊笼,才能够实现。所以,创业者的欲望往往伴随着行动力和牺牲精神。这不是普通人能够做得到的。


因为想得到,而凭自己现在的身份、地位、财富得不到,所以要去创业,要靠创业改变身份,提高地位,积累财富,这构成了许多创业者的人生“三部曲”。


因为欲望,而不甘心,而创业,而行动,而成功,这是大多数白手起家的创业者走过的共同道路。


或许我们可以套用一句伟人的话:“欲望是创业的最大推动力。”


2、超乎想象的忍耐力


在创业的路上,付出怎样的代价,付出怎样的努力,忍受了多少别人不能够忍受的憋闷、痛苦、甚至是屈辱、这种心情只有创业过的人最清楚!有多少人愿意付出与他们一样的代价.


对一般人来说,忍耐是一种美德,对创业者来说,忍耐却是必须具备的品格。


老话说“吃得菜根,百事可做”。对创业来说,肉体上的折磨算不得什么,精神上的折磨才是致命的,如果有心自己创业,一定要先在心里问一问自己,面对从肉体到精神上的全面折磨,你有没有那样一种宠辱不惊的“定力”与“精神力”。如果没有,那么一定要小心。对有些人来说,一辈子给别人打工,做一个打工仔,是一个更合适的选择。


3、开阔的眼界


对于创业者来说,只有真正见多识广。广博的见识,开阔的眼界,才能有效地拉近自己与成功的距离,使创业活动少走弯路。


众多成功创业者创业思路的几个共同来源。


第一,职业。俗话说,不熟不做,由原来所从事的职业下海,对行业的运作规律、技术、管理都非常熟悉,人头、市场也熟悉,这样的创业活动成功的几率很大。这是最常见的一种创业思路的来源。


第二,阅读,包括书、报纸、杂志等等。比亚迪老总王传福的创业灵感来自一份国际电池行业动态,一份简报似的东西。1993年的一天,王传福在一份国际电池行业动态上读到,日本宣布本土将不再生产镍镉电池,王传福立刻意识这将引发镍镉电池生产基地的国际大转移,意识自己创业的机会来了。果然,随后的几年,王传福利用日本企业撤出留下的市场空隙,很多人将读书与休闲等同,对创业者来说,阅读就是工作,是工作的一部分,一定要有这样的意识。


第三,行路。俗话说,“读万卷书,行千里路”。行路,各处走走看看,是开阔眼界的好方法.


眼界意味着什么?如果你是一个创业者,开阔的眼界意味着你不但在创业伊始可以有一个比别人更好的起步,有时候它甚至可以挽救你和你企业的命运。眼界的作用,不仅表现在创业者的创业之初,它会一直贯穿于创业者的整个创业历程.“一个创业者的眼界有多宽,他的事业也就会有多大。”


第四,交友。很多创业者最初的创业IDEA(主意)是在朋友启发下产生,或干脆就是由朋友直接提出的。所以,这些人在创业成功后,都会更加积极地保持与从前的朋友联系,并且广交天下友,不断地开拓自己的社交圈子。与朋友们进行头脑风暴,就能够不断地有新思路、新点子.


四大创业IDEA的来源,也就是四大开阔眼界的有效方法。有空一定要到处多走一走,多和朋友谈一谈天,多阅读,多观察,多思考。“机遇只垂青有准备的头脑”,让自己“眼界大开”就是最好的准备。


4、善于把握趋势又通人情事理


势,就是趋向。做过期货的人都知道,要想赚钱关键是要做对方向,这个方向就是势。比方说,大势向空,你偏做多;或者大势利多,你偏做空,你不赔钱谁赔钱!反过来说,你就是不想赚钱都难。


势分大势、中势、小势。创业的人,一定要跟对形势,要研究政策。这是大势。很多创业者认为政策研究“假、大、虚、空”,没有意义。实则不然。对一个创业者来说,大到国家领导人的更迭,小到一个乡镇芝麻小官的去留,都会对自己有影响。在政策方面,国家鼓励发展什么,限制发展什么,对创业之成败更有莫大关系。做对了方向,顺着国家鼓励的层面努力,可能事半功倍;做反了方向,比如说,某个行业、某类型企业,国家正准备从政策层面进行限制、淘汰,你偏赶在这时懵懵懂懂一头撞了进去,一定会鸡飞蛋打。


顺势而作,才能顺水行舟。观察政府,研究政策,是为了明大势。


中势指的就是市场机会。市场上现在时兴什么,流行什么,人们现在喜欢什么,不喜欢什么,可能就标明了你创业的方向。俞敏洪如果不是赶上全国性的英语热和出国潮,他就是使再大的劲,洒再多的泪,流再多的汗,也不会有今天的成功。


小势就是个人的能力、性格、特长。创业者在选择创业项目时,一定要找那些适合自己能力,契合自己兴趣,可以发挥自己特长的项目,这样才有利于你做持久性的全身心的投入。创业是一项折磨人的活动,创业者要有受罪的心理准备。


一个创业者要懂得人情事理。老话说:“世事洞明皆学问,人情练达即文章。”创业的首要目的是为了合理合法地赚钱,不是为了改造社会。改造社会是等你发达以后,还需要你有那样的兴趣。创业更不是为了要跟谁赌气,你非要如何如何,非要让对方觉得你这个人如何如何,你才觉得心里舒服,你那是自己为自己设绊。


创业是一个在夹缝里求生存的活动,尤其处于社会转轨时期,各项制度、法律环境都不十分健全,创业者只有先顺应社会,才能避免在人事关节上出问题。作为对照,很多原先很牛气的外资企业,认为本地人才这样不行,那样不行,只有外来和尚才能念好经,现在也都认识到了人才本地化的重要。人才为什么要本地化?因为本地的人才更熟悉本地的情况,能够按照“本地的规矩”做事,也就是说更能入乡随俗。创业者一定要明势,不但要明政事、商事,还要明世事、人事,这应该是一个创业者的基本素质。


5、敏锐的的商业嗅觉,即商业敏感性


创业者的敏感,是对外界变化的敏感,尤其是对商业机会的快速反应。


潘石屹现在是商场的红人,潘石屹成为红人有他成为红人的理由。有谁能够从别人的一句话里听出8亿元的商机,而且是隔着桌子的一句话,是几个不相干之人的一句话?


1992年,潘石屹还在海南万通集团任财务部经理。万通集团由冯仑、王功权等人于1991年在海南创立。冯仑、王功权都曾在南德集团做过事,当年都是“中国首富”牟其中的手下谋士。万通成立的头两年,通过在海南炒楼赚了不少钱。1992年,随着海南楼市泡沫的破灭,冯仑等人决定将万通移师北京,派潘石屹打前锋。


潘石屹奉冯仑的将令,带着5万元差旅费来到了北京。“这天,他(指潘石屹)在怀柔县政府食堂吃饭,听旁边吃饭的人说北京市给了怀柔四个定向募集资金的股份制公司指标,但没人愿意做。在深圳待过的潘石屹知道指标就是钱,他不动声色地跟怀柔县体改办主任边吃边聊:”我们来做一个行不行?‘体改办主任说:“好哇,可是现在来不及了,要准备6份材料,下星期就报上去。’


“潘石屹立即将这个信息告诉了冯仑,冯仑马上让他找北京市体改委的一位负责人。这位领导说:”这是件好事,你们愿意做就是积极支持改革,可以给你们宽限几天。‘做定向募集资金的股份制公司,按要求需要找两个’中‘字头的发起单位。通过各种关系,潘石屹最后找到中国工程学会联合会和中国煤炭科学研究院作为发起单位。万事俱备,潘石屹用刚刚买的4万元一部的手机打电话问冯仑:“准备做多大?’冯仑说:”要和王功权商量一下。‘王功权说:“咱们现在做事情,肯定要上亿。’


“潘石屹在电话那边催促冯仑快做决定,‘这边还等着上报材料呢。’冯仑就在电话那头告诉潘石屹:”8最吉利,就注册8个亿吧。‘北京万通就这样,在什么都没做的情况下,拿到了8个亿的现金融资。“


这就是潘石屹那个“一言8亿”的传奇故事。后来万通在海南做赔了本,多亏了潘石屹这一耳朵“听”来的8个亿,才有了万通的今天。后来兄弟几个又闹分家,于是诞生了潘石屹现在的红石和北京大北窑旁边的现代城。


潘石屹能赚到这笔钱不是出自偶然,而是源于他的商业敏感。


有些人的商业感觉是天生的,如胡雪岩,更多人的商业感觉则依靠后天培养。如果你有心做一个商人,你就应该像训练猎犬一样训练自己的商业感觉。良好的商业感觉,是创业者成功的最好保证。


6、拓展人脉


创业不是引“无源之水”,栽“无本之木”。每一个人创业,都必然有其凭依的条件,也就是其拥有的资源。一个创业者的素质如何,看一看其建立和拓展资源的能力就可以知道。


创业者资源,可分为外部资源和内部资源两种。内部资源主要是创业者个人的能力,其所占有的生产资料及知识技能,家族资源等。拥有一份良好的内部资源,对创业者个人来说无疑是重要的..


但外部资源的创立。同样不可或缺。其中最重要的一点是人脉资源的创业,即创业者构建其人际网络或社会网络的能力。一个创业者如果不能在最短时间之内建立自己最广泛的人际网络,那他的创业一定会非常艰难,即使其初期能够依靠领先技术或者自身素质,比如吃苦耐劳或精打细算,获得某种程度上的成功,我们也可以断言他的事业一定做不大。


创业者人际资源,按其重要性来看,第一是同学资源。


在许多成功者的身后都可以看到同学的身影,有少年时代的同学,有大学时代的同学,更有各种成人班级如进修班、研修班上的同学。赫赫有名的《福布斯》中国富豪南存辉和胡成中就是小学和中学时的同学,一个是班长,一个是体育委员,后来两人合伙创业,在企业做大以后才分了家,腾讯马化腾也是与大学同学一起创业.


实际上,同学之间本来就有守望相助的义务,在现今这个时代,带着商业或功利的目的走进学堂,也并没有什么不妥当。


同学之间因为接触比较密切,彼此比较了解,同时因为少年人不存在利害冲突,成年人则大多数从五湖四海走到一起,彼此也甚少存在利害冲突,所以友谊一般都较可靠,纯洁度更高。对于创业者来说,是值得珍惜的最重要的外部资源之一。


与同学相似的,是战友;可以与同学和战友相提并论的是同乡。共同的人文地理背景,使老乡有一种天然的亲近感。曾国藩用兵只喜欢用湖南人,中国历史上最成功两大商帮,徽商和晋商不管走到哪里,都是老乡拉帮结派,成群结伙的。正是同乡之间互为犄角,互为支援,才成就了晋商和徽商历史上的辉煌。同学资源和同乡资源,可并称为创业者最重要的两大外部资源。


第二是职业资源。对创业者来说,效用最明显首推职业资源。所谓职业资源,即创业者在创业之前,为他人工作时所建立的各种资源,主要包括项目资源和人际资源。充分利用职业资源,从职业资源入手创业,符合创业活动“不熟不做”的教条。尤其是在国内目前还没有像美国或欧洲国家一样,普遍认同和执行“竞业避止”法则的情况下,选择从职业资源入手进行创业,已经成为了许多人创业成功的捷径和法宝。 前中学数学教师、“好孩子”创始人宋郑还是通过一位学生的家长,得到了第一批童车订货,这才知道世界上原来还有童车这样一个赚钱玩意儿的。同时,宋郑还做童车的第一笔资金也是通过一位在银行做主任的学生家长获得的。如果没有学生家长的帮助,宋郑还可能会一事无成。而万通的冯仑和王功权原来则是同事,两人曾一起在南德工作过,后来两人离开南德,携手海南打天下,才有了现在的兴旺发达。


第三是朋友资源。朋友应该是一个总称。同学是朋友,战友也是朋友。老乡是朋友,同事一样是朋友。一个创业者,三教九流的朋友都要交,谈得来,交得上,就好像十八般兵刃,到时候不定就用上了哪般。朋友尤如资本金,对创业者来说是多多益善。“在家靠父母,出门靠朋友”、“多一个朋友多一条路”是至理名言。一个创业者如果不能交朋友,没有几个朋友,肯定只有死路一条。人际交往能力应列在创业者素质的第一位。


7、谋略


商场如战场,一个有勇无谋的人,早晚会成为别人的盘中餐。


创业是一个斗体力的活动,更是一个斗心力的活动。创业者的智谋,将在很大程度上决定其创业成败。尤其是在目前产品日益同质化,市场有限,竞争激烈的情况下,创业者不但要能够守正,更要有能力出奇。


对创业者来说,无所谓大智慧小智慧,能把事情做好,能赚到钱就是好智慧。京城白领没有几个没有吃过丽华快餐的,京城的大街小巷,经常能看见漆着丽华快餐标志的自行车送餐队。丽华快餐由一个叫蒋建平的人创立,起家地是江苏常州,开始不过是常州丽华新村里的一个小作坊,在蒋建平的精心打理下,很快发展为常州第一快餐公司。几年前,当蒋建平决定进军北京时,北京快餐业市场已近饱和。蒋建平剑走偏锋,从承包中科院电子所的食堂做起,做职工餐兼做快餐,这样投入少而见效快;由此推而广之,好像星火燎原,迅速将丽华快餐打入了北京市。假如蒋建平当初进入北京,依循常规,租门面,招员工,拉开架式从头做起,恐怕丽华快餐不会有今天。


谋略或者说智慧,贯穿于创业者的每一个创业行动中。


谋略其实就是一种思维的方式,一种处理问题和解决问题的方法。


对于创业者来说,智慧是不分等级的,它没有好坏、高明不高明的区别,只有好用不好用,适用不适用的问题。创业者智慧:不拘一格,出奇制胜。作为创业者,你的思维是否至今依然因循守旧?


8、胆量


创业本身就是一项冒险活动。要有胆量,敢下注,想赢也敢输,创业是最需要强大心理承受能力的一项活动。


很多创业者在创业的道路上,都有过“惊险一跳”的经历。这一跳成功了,功成名就,白日飞升;要是跳不成,就只好凤凰涅了。当年周枫带人做婷美,一个500万元的项目,做了2年多,花了440万元还是没有做成。眼看钱就没了,合作伙伴都失去了信心,要周枫把这个项目卖了。周枫说,这样好的项目不能卖,要卖也要卖个好价钱。合作伙伴说,这样的项目怎么能卖到那么多钱,要不然你自己把这个项目买下来算了。周枫就花5万元钱把这个项目买了下来。原来大家一起还有个合伙公司,作为代价,周枫把在这个合伙公司的利益也全部放弃了,据说损失有几千万元。单干的周枫带着23名员工,把自己的房子抵押,跟几个朋友一共凑了300万元。他把其中5万元存在帐上,另外的钱,他算过,一共可以在北京打2个月的广告。从当年的11月到12月底,他告诉员工,这回做成了咱们就成了,不成,你们把那5万块钱分了,算是你们的遣散费,我不欠你们的工资。咱们就这样了!这些话把他的员工感动得要哭,当时人人奋勇争先,个个无比卖力,结果婷美就成功了。周枫成了亿万富翁,他的许多员工成了千万富翁、百万富翁。现在很多的大学教授、市场专家分析周枫和婷美成功有诸多原因,其实事情没有这么复杂。说白了,不过是一个合适的产品,加上一个天性敢赌的领导,加上一些合适的营销手段,才有了这样一桩成功的案例。


创业需要胆量,需要冒险。冒险精神是创业家精神的一个重要组成部分,但创业毕竟不是赌博。创业家的冒险,迥异于冒进。什么叫冒险,什么叫冒进?冒险是这样一种东西,你经过努力,有可能得到,而且那东西值得你得到。否则,你只是冒进,死了都不值得。创业者一定要分清冒险与冒进的关系,要区分清楚什么是勇敢,什么是无知。无知的冒进只会使事情变得更糟,你的行为将变得毫无意义。


9、与他人分享的愿望


作为创业者,一定要懂得与他人分享。一个不懂得与他人分享的创业者,不可能将事业做大。


只有当老板舍得付出,舍得与员工分享,员工的生存需要、安全需要、尊重需要就从老板这里都得到了满足。员工出于感激,同时也因为害怕失去眼前所获得的一切,就会产生“自我实现的需要”,通过自我实现,为老板做更多的事,赚更多的钱,做更大的贡献,回报老板。这样就构成了一个企业的正向循环、良性循环。这应该是马斯洛理论在企业层面的恰当解释。


做生意的人都会算帐,只不过有些人算得是大帐,有些人算得是小帐。商业法则:算大帐的人做大生意,做大生意人;算小帐的人永远只能做小生意,做小生意人。


分享不仅仅限于企业或团队内部,对创业者来说,对外部的分享有时候同样重要。在南存辉的发家史上,曾经进行过4次大规模的股权分流,从最初持股100%,到后来只持有正泰股权的28%,每一次当南存辉将自己的股权稀释,将自己的股权拿出来,分流到别人口袋里去的时候,都伴随着企业的高速成长。但是南存辉觉得自己并没有吃亏,因为蛋糕做大了,自己的相对收益虽然少了,但是绝对收益却大大地提高了。


分享不是慷慨,对创业者来说,分享是明智。


10、自我反省的能力


反省其实是一种学习能力。创业既然是一个不断摸索的过程,创业者就难免在此过程中不断地犯错误。反省,正是认识错误、改正错误的前提。对创业者来说,反省的过程,就是学习的过程。有没有自我反省的能力,具不具备自我反省的精神,决定了创业者能不能认识到自己所犯的错误,能不能改正所犯的错误,是否能够不断地学到新东西。


成功创业者有一个共通之处,就是都非常善于学习,非常勇于进行自我反省。


作为一个创业者,遭遇挫折,碰上低潮都是常有的事,在这种时候,反省能力和自我反省精神能够很好地帮助你度过难关。曾子说:“吾日三省吾身”。对创业者来说,问题不是一日三省吾身、四省吾身,而是应该时时刻刻警醒、反省自己,惟有如此,才能时刻保持清醒。


创业者需要的是综合素质,每一项素质都很重要,不可偏废。缺少哪一项素质,将来都必然影响事业的发展。有些素质是天生的,但大多数可以通过后天的努力改善。如果你能够从现在做起,时时惕砺,培养自己的素质,你的创业成功一定指日可待。

无赖是这样炼成的

一.公车站台

“小姐你踩到我脚了.”

“没有吧,我离你那么远.”

“我是说,如果你把脚不小心放在了我脚上,就是踩到我脚了.”

“神经病.”

“哇,小姐好眼力,我确实有神经病史,一般看见漂亮的女孩就发作.”

“你们男人总悄茄?说些无聊的话故意引女孩子故意.好象以为自己很帅.”

“小姐你错了,我从不以为我自己帅,而是我本身就很帅.”

“别那么恶心人好吧.我要吐了.”

“在你吐之前我可以问你个问题吗?”

“有屁快放”.

“你为什么要昧着良心否定我的帅?”

“滚........”

  


  


二.公车上

“怎么又是你?”

“有时候我的确无处不在.”

“你知不知道你很烦人,那么多位置不坐,偏要坐我旁边.”

“小姐,你搞清楚,我只是坐了个空位置,而空位置的旁边,刚好有个你,如此而已.”

“前面也有个空位置你怎么不去?”

“噢,明白了,原来你是想看我屁股,或者我用屁股看你?”

“快滚....”

  


  


三.下了公车

“你为什么又下车?”

“反正不是因为你!我喜欢闲逛.”

“我告你性骚扰,你哪个单位的?”

“你是说斤,还是焦耳,牛顿?”

“我跟你很熟吗?老说这种无厘头话,对不起,我不感冒!”

“是呀,我们一点都不熟.我们好比一个枝头的两棵青草莓,酸酸的.”

“看了几次大话西游,学了几句唐僧话,以为你很幽默么?”

“幽默是天生的,要怪,你去怪我妈嘛.对了,还有我爸爸...”

“神经.”

“你妈神经.”

“你妈神经.”

“你看你,明明是你妈却要硬说成是我妈,莫非你想....”

“给我滚....”


四.KCF门口

“不会吧,我怎么那么倒霉又遇到你.”

“我也发觉了,我想我前辈子的罪一定很重”

“你说清楚点!小心我扁你!”

“你敢.我会叫的.”

“叫什么?”

“非礼呀,但不说强*.”

“你以为会有人理你么?”

“没有也好,我非礼回来好了.”

“天拉,你这样的无赖都有,真是瞎了老天的眼!”

“恩,是呀,要不然这世界上也不会存在什么所谓的精英.”

“........”

  


  


五.KFC里

“别说话,你一说话我就烦.”

“我还没说呀,讲点道理好不好?”

“我都叫你别说了,你说起话来象只苍蝇,恶心死了.”

“噢,本来话能起到这么大的作用,实在是惊天地,泣鬼神哟,我可以做个兼职哟?”

“做什么?”

“去医院帮人洗胃.”

“你没的救了,早点回去料理后事吧.”

“临死前我没有什么要求,我只想对你说几个字,又怕你不答应.你答应么?”

“说吧,合理要求可以考虑.”

“这顿KFC你请我好吗?”

“去死.....”

  


  


六.出KFC

“你没女朋友吗?星期天一个人闲逛?”

“准确的说我没女朋友,但有女性朋友,你问这个干嘛?”

“没什么呀,关心你终生大事,不好吗?”

“好,怎么不好?你好象我一个我深爱的人。”

“谁?..”

“我老妈.她也老喜欢问这问那。”

“要不是在街上这么多人看着,我真想揍你.”

“我都不怕别人看见你揍我,你怕什么呀?你呢,不陪男朋友吗?”

“不要你管!”

“噢,明白了.被男朋友抛弃了,揍我想找心理平衡.”

“狗嘴里吐不出象牙.明说吧,我不想找.”

“考虑一下我吧,我吃点亏.”

“求你别再恶心我了.”

“我可以无条件充当你的临时演员,如果需要男朋友的时候请打***********”

“到时候再说.”

“告诉我你的电话好吧?”

“到时候再说或到 http://yedsky.blogspot.com/ 里给我留言别说你不知道这个网站.再烦我骂你了呀.”

“是啊我正要说啊我是不知道啊,我这就去看一下,为此我等着你发条信息骂我.”

..................

  


  


七.各自回家

“奇怪,我真的好想发条信息去骂他.”

“呵呵.她不发信息骂我才奇怪.”

“完蛋了,难道我真的喜欢那个无赖了?”

“嘿嘿,她不喜欢我这个无赖那才叫完蛋.”

SQL语句大全

一-基础


1-说明:创建数据库

Create DATABASE database-name


2-说明:删除数据库

drop database dbname


3-说明:备份sql server

--- 创建 备份数据的 device

USE master

EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'

--- 开始 备份

BACKUP DATABASE pubs TO testBack


4-说明:创建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

根据已有的表创建新表:

A:create table tab_new like tab_old (使用旧表创建新表)

B:create table tab_new as select col1,col2… from tab_old definition only


5-说明:删除新表

drop table tabname


6-说明:增加一个列

Alter table tabname add column col type

注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。


7-说明:添加主键: Alter table tabname add primary key(col)

说明:删除主键: Alter table tabname drop primary key(col)


8-说明:创建索引:create [unique] index idxname on tabname(col….)

删除索引:drop index idxname

注:索引是不可更改的,想更改必须删除重新建。


9-说明:创建视图:create view viewname as select statement

删除视图:drop view viewname


10-说明:几个简单的基本的sql语句

选择:select * from table1 where 范围

插入:insert into table1(field1,field2) values(value1,value2)

删除:delete from table1 where 范围

更新:update table1 set field1=value1 where 范围

查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!

排序:select * from table1 order by field1,field2 [desc]

总数:select count as totalcount from table1

求和:select sum(field1) as sumvalue from table1

平均:select avg(field1) as avgvalue from table1

最大:select max(field1) as maxvalue from table1

最小:select min(field1) as minvalue from table1


11-说明:几个高级查询运算词

A: UNION 运算符

UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。

B: EXCEPT 运算符

EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。

C: INTERSECT 运算符

INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。

注:使用运算词的几个查询结果行必须是一致的。


12-说明:使用外连接

A-left outer join:

左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

B:right outer join:

右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。

C:full outer join:

全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。


二-提升


1-说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)

法一:select * into b from a where 1<>1

法二:select top 0 * into b from a


2-说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)

insert into b(a, b, c) select d,e,f from b;


3-说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)

insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件

例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..


4-说明:子查询(表名1:a 表名2:b)

select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)


5-说明:显示文章-提交人和最后回复时间

select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b


6-说明:外连接查询(表名1:a 表名2:b)

select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c


7-说明:在线视图查询(表名1:a )

select * from (Select a,b,c FROM a) T where t.a > 1;


8-说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括

select * from table1 where time between time1 and time2

select a,b,c, from table1 where a not between 数值1 and 数值2


9-说明:in 的使用方法

select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)


10-说明:两张关联表,删除主表中已经在副表中没有的信息

delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )


11-说明:四表联查问题:

select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....


12-说明:日程安排提前五分钟提醒

SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5


13-说明:一条sql 语句搞定数据库分页

select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段


14-说明:前10条记录

select top 10 * form table1 where 范围


15-说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)

select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)


16-说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表

(select a from tableA ) except (select a from tableB) except (select a from tableC)


17-说明:随机取出10条数据

select top 10 * from tablename order by newid()


18-说明:随机选择记录

select newid()


19-说明:删除重复记录

Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)


20-说明:列出数据库里所有的表名

select name from sysobjects where type='U'


21-说明:列出表里的所有的

select name from syscolumns where id=object_id('TableName')


22-说明:列示type-vender-pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。

select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type

显示结果:

type vender pcs

电脑 A 1

电脑 A 1

光盘 B 2

光盘 A 2

手机 B 3

手机 C 3


23-说明:初始化表table1


TRUNCATE TABLE table1


24-说明:选择从10到15的记录

select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc


三-技巧


1-1=1,1=2的使用,在SQL语句组合时用的较多


“where 1=1” 是表示选择全部 “where 1=2”全部不选,

如:

if @strWhere !=''

begin

set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere

end

else

begin

set @strSQL = 'select count(*) as Total from [' + @tblName + ']'

end


我们可以直接写成

set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere


2-收缩数据库

--重建索引

DBCC REINDEX

DBCC INDEXDEFRAG

--收缩数据和日志

DBCC SHRINKDB

DBCC SHRINKFILE


3-压缩数据库

dbcc shrinkdatabase(dbname)


4-转移数据库给新用户以已存在用户权限

exec sp_change_users_login 'update_one','newname','oldname'

go


5-检查备份集

RESTORE VERIFYONLY from disk='E:\dvbbs.bak'


6-修复数据库

Alter DATABASE [dvbbs] SET SINGLE_USER

GO

DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK

GO

Alter DATABASE [dvbbs] SET MULTI_USER

GO


7-日志清除

SET NOCOUNT ON

DECLARE @LogicalFileName sysname,

@MaxMinutes INT,

@NewSize INT


USE tablename -- 要操作的数据库名

Select @LogicalFileName = 'tablename_log', -- 日志文件名

@MaxMinutes = 10,

原文地址 http://blog.h3bbs.com/article.asp?id=521

精辟解读牛逼、装逼、傻逼之间的区别


  • 牛逼是少数,

  • 装逼事普遍存在的,

  • 傻逼到处都是。




  • 牛逼的人只有一个女人,

  • 装逼的人女人很多,

  • 傻逼的人的女人的男人很多。




  • 牛逼的人不在乎开车还是走路,

  • 装逼的人出门必开宝马,

  • 傻逼的人开吉利美人豹。




  • 牛逼的人喝的是国宴特供,

  • 装逼的人喝的是芝华士,

  • 傻逼的人喝的是干红兑雪碧。




  • 牛逼的人穿着板鞋去谈生意,

  • 装逼的人穿者西服去音乐厅,

  • 傻逼的人穿者盛装去麦当劳。




  • 牛逼的人点烟别人给点,

  • 装逼的人点烟用火柴,

  • 傻逼的人点烟用zippo。




  • 牛逼的人和国人只说中国白话,

  • 装逼的人爱夹杂着文言文,

  • 傻逼的人说话爱中英文夹杂。Too simple, sometimes naive.




  • 牛逼的人写文章有自己的风格,

  • 装逼的人写文章爱模仿旧式口语,

  • 傻逼的人写文章像CCTV。




  • 牛逼的人有自己的生活方式,

  • 装逼的人模仿别人的生活方式,

  • 傻逼的人模仿不好别人的生活方式。




  • 牛逼的人就是在游泳池里撒尿都不动声色,

  • 装逼的人想学牛逼的人在泳池里撒尿却因为上火尿出黄色液体。

  • 傻逼的人直接在跳台上向泳池里撒尿。




  • 牛逼的人需要相处一段时间才会觉得他牛逼,

  • 装逼的人刚开始相处觉得很牛逼,时间长了才知道是装逼,

  • 傻逼的人一开始就让人觉得很傻逼。




  • 牛逼的人一般都自称傻逼,

  • 装逼的人也自称傻逼,但生怕别人不知道自己牛逼而装作牛逼。

  • 傻逼的人逢人就称自己牛逼。




  • 牛逼的人最怕别人说自己牛逼,

  • 装逼的人最怕别人说自己不牛逼,

  • 傻逼的人最怕别人说自己傻逼。




  • 牛逼的人知道自己牛逼,

  • 装逼的人以为自己牛逼,

  • 傻逼的人不知道自己傻逼。




  • 有实力装逼是牛逼,

  • 没有实力的装逼是傻逼。

  • 在某种情况下,傻逼可以进化成装逼,装逼也可以退化成傻逼,很多时候装逼和傻逼的界限是模糊的,但牛逼永远是牛逼。



看此帖后,



  • 牛逼的人一般都心想:我很傻逼,

  • 装逼的人一般都回复:我很傻逼,

  • 傻逼的人一般都回复:我很牛逼。


RTSP:实时流协议(Real Time Streaming Protocol)

实时流协议(RTSP)建立并控制一个或几个时间同步的连续流媒体,如音频和视频。尽管连续媒体流与控制流交叉是可能的,RTSP本身并不发送连续流。换言之,RTSP充当多媒体服务器的网络远程控制。RTSP提供了一个可扩展框架,实现实时数据(如音频与视频)的受控、按需传送。数据源包括实况数据与存储的剪辑。RTSP用于控制多个数据发送会话,提供了选择发送通道(如UDP、组播UDP与TCP等)的方式,并提供了选择基于RTP的发送机制的方法。


目前还没有RTSP连接的概念;服务器维护由识别符标识的会话。RTSP会话不会绑定到传输层连接,如TCP。在RTSP会话期间,RTSP客户端可打开或关闭多个对服务器的可靠传输连接以发出RTSP请求。它也可选择使用无连接传输协议,如UDP。


RTSP控制的流可能用到RTP,但RTSP操作并不依赖用于传输连续媒体的传输机制。RTSP在语法和操作上与HTTP/1.1类似,因此HTTP的扩展机制在多数情况下可加入RTSP。然而,在很多重要方面RTSP仍不同于HTTP:


RTSP引入了大量新方法并具有一个不同的协议标识符:

在大多数情况下,RTSP服务器需要保持缺省状态,与HTTP的无状态相对;

RTSP中客户端和服务器都可以发出请求;

在多数情况下,数据由不同的协议传输;

RTSP使用ISO10646(UTF-8)而并非ISO8859-1,与当前的国际标准HTML相一致;

URI请求总是包含绝对URI。为了与过去的错误相互兼容,HTTP/1.1只在请求过程中传送绝对路径并将主机名置于另外的头字段。

该协议支持如下操作:


从媒体服务器上检索媒体:用户可通过HTTP或其它方法提交一个演示描述请求;

媒体服务器邀请进入会议:媒体服务器可被邀请参加正进行的会议,或回放媒体,或记录部分或全部演示;

将新媒体加到现有演示中:如服务器能告诉客户端接下来可用的媒体内容,对现场直播显得尤其有用。


协议结构


RTSP是一种文本协议,采用UTF-8编码中的ISO10646字符集。一行可通过CRLF终止,但接收端需要做好解释CR和LF作为一行终止符的准备。关于头字段概述如下:














































































































































































































































































HeaderTypeSupportMethods
AcceptRopt.entity
Accept-EncodingRopt.entity
Accept-LanguageRopt.all
AllowRopt.all
AuthorizationRopt.all
BandwidthRopt.all
BlocksizeRopt.All but OPTIONS, TEARDOWN
Cache-ControlGopt.SETUP
ConferenceRopt.SETUP
ConnectionGreq.all
Content-BaseEopt.entity
Content-EncodingEreq.SET_PARAMETER
Content-EncodingEreq.DESCRIBE, ANNOUNCE
Content-LanguageEreq.DESCRIBE, ANNOUNCE
Content-LengthEreq.SET_PARAMETER, ANNOUNCE
Content-LengthEreq.entity
Content-LocationEopt.entity
Content-TypeEreq.SET_PARAMETER, ANNOUNCE
Content-TypeRreq.entity
CSeqGreq.all
DateGopt.all
ExpiresEopt.DESCRIBE, ANNOUNCE
FromRopt.all
If-Modified-SinceRopt.DESCRIBE, SETUP
Last-ModifiedEopt.entity
Proxy-Authenticate
Proxy-RequireRreq.all
PublicRopt.all
RangeRopt.PLAY, PAUSE, RECORD
RangeRopt.PLAY, PAUSE, RECORD
RefererRopt.all
RequireRreq.all
Retry-AfterRopt.all
RTP-InfoRreq.PLAY
ScaleRropt.PLAY, RECORD
SessionRrreq.All but SETUP, OPTIONS
ServerRopt.all
SpeedRropt.PLAY
TransportRrreq.SETUP
UnsupportedRreq.all
User-AgentRopt.all
ViaGopt.all
WWW-AuthenticateRopt.all



类型 "g" 表示请求和响应中的通用请求头;类型 "R" 表示请求头;类型 "r" 表示响应头;类型 "e" 表示实体头字段。在 "support" 一栏中 标有 "req." 的字段 必须由接收者以特殊的方法实现;而 "opt." 的字段是可选的。注意,不是所有 "req." 字段在该类型的每个请求中都会被发送。 "req." 只表示客户机(支持响应头)和服务器(支持请求头)必须执行该字段。最后一栏列出了关于头字段产生作用的方法;其中 "entity" 针对于返回一个信息主体的所有方法。

系统封装

虽然Windows的性能在不断增强和完善,但是系统安装的速度依然是十分缓慢且让人头疼。虽然2006年底推出的Windows Vista凭借微软的新技术ImageX,可以在短短20分钟内安装10几G左右的文件,但是由于Windows Vista对计算机硬件要求较高,软件兼容性尚不理想,(虽然sp1的发布,会改善些问题)所以未得到最好的普及,目前使用最广泛的Windows操作系统,依然是Windows XP。

Windows XP 的安装时间在约20~30分钟左右,这还不算更新Windows安全补丁、系统优化以及软件安装的时间,平均来算,要完全安装一个可用的(包含常用补丁和软件,以及必要的系统优化)Windows XP操作系统,至少需要1个小时左右的时间。经常让我很头痛.有时候在虚拟机里做试验,来是忘记用什么UNDO盘,或者快照之类的..在从新装的时候很麻烦.


为解决系统安装过于繁杂耗时的问题,我首先考虑到的是利用微软自己的所谓“封装部署工具”(Sysprep)。


所谓封装部署,是微软为大企业用户提供的一种结构化的部署操作系统的工具。可以在一台计算机上把已经做好各种调试的系统进行再封装,封装完毕的系统,可以部署到其他计算机中,部署时间相当的短,大概仅仅5~6分钟,极大的提高对计算机系统的维护效率。


但是封装部署是有条件的,即仅适用于封装的源计算机和用于部署的目标计算机必须具有相同硬件抽象层 (HAL),即不相同硬件配置的机器不能互相部署对方机器上封装好的操作系统,这样就会对当今繁杂的计算机硬件配置中进行封装和部署造成极大的障碍。


通过Longhorn PE2.0的研究,发现微软在Longhorn启动参数中提供了/detecthal 接口,依靠这个接口,我们可以让计算机在启动时自动检测硬件抽象层(HAL),通过了这个检测,封装完的系统在部署到不同的计算机中时,就不会出现由于硬件抽象层(HAL)的不同而造成的系统在部署过程中由于对硬件的依赖而造成的种种非正常运行。


这样,一个被调试好的系统(包括系统补丁追加、系统优化、常用软件安装)可以在进行封装后,高效的部署到任何硬件配置的其他计算机上,极大的缩短进行计算机维护的时间,极大的提高计算机维护的效率。


系统的封装与部署,这个概念出自Microsoft.在Microsoft的Windows系列系统光盘中,包含企业部署工具,Deploy中包括了几个可供管理员和 IT 专业人士用来将 Windows 部署到组织中多台计算机上的工具。


Deploy.cab包括:Setupmgr.exe、Sysprep.exe、Cvtarea.exe、Oformat.com。


Setupmgr.exe,中文译为:安装管理器,为预安装 Microsoft 操作系统和各种应用程序自动创建和修改分布共享的向导。简单来说,这个工具主要是用来自动创建安装Windows操作系统的自动应答文件,可以让系统的安装做到“无人职守”,即在系统的安装过程中,无需任何人为的干预。


Sysprep.exe,中文译为:系统准备,准备计算机硬盘,以便进行磁盘复制、审核并交付客户。在分发前必须运行 Sysprep 以重新封装计算机。Sysprep 包含下列组件:Sysprep.exe、Setupcl.exe、Factory.exe、Sysprep.inf 和 Winbom.ini。应用程序文(Sysprep.exeSetupcl.exe 和 Factory.exe)是必需的,而且它们互相依存。简单来说,这个工具用于重新封装已经在计算机上安装好的系统,封装完毕的映像可以通过介质复制到其他计算机上,当获取封装好的映像的计算机启动时,Sysprep.exe将调用%Windir%\System32\setup.exe在获取映像的计算机中重新部署系统。这种部署类似于直接安装系统,但是速度要比正常安装快许多倍。


Cvtarea.exe,一个用于在 FAT32 或 FAT 文件系统上创建文件并分析那些文件放置情况的灵活工具。使用 Cvtarea 工具,您可以创建连续的文件并将其放在磁盘上的特定位置。


Oformat.com,创建 FAT32 卷,该卷中的簇以某种优化方法取整,以便在以后将其转换为 NTFS 文件系统格式。

总体而言,随着技术的发展,可以替代Cvtarea.exe和Oformat.com的工具出现了许多,Setupmgr.exe用于生成无人职守安装应答文件,

Sysprep.exe是用于系统封装的主要工具。


1.2 Setupmgr

获得封装好的系统映像的计算机,第一次启动时,将会自行进行系统部署,系统部署过程中,会提问用户有关产品密钥、时区、计算机名称、管理员密码等等,这个和普通的系统安装的步骤一样(当然,比普通安装快速的多),每次都去输入这些,无非会降低工作效率。

利用Setupmgr.exe,可以为系统部署创建一份自动应答文件,当系统部署时碰到各种需要用户来确认的信息时,直接去这份自动应答文件中寻找预先规定好的答案,而无需提示用户输入。


Setupmgr.ex的使用方法十分简单,安装提示一步步写下去即可。

写完后,即可单击“完成”,这样就可以完成所有有关无人职守安装模式的设定了。设定完成后,系统会自动生成Sysprep.inf文件,这个文件中记录了所有有关自动应答的答案。

部署时,sysprep.inf置于%systemdrive%\Sysprep文件夹中,即可执行无人职守的部署安装。


1.3 Sysprep


1.3.1系统封装部署基本流程


一般流程为:



  • 1>常规安装Windows到被设置为启动的硬盘的第一分区(一般为C盘);

  • 2>对系统做应有的系统补丁添加、驱动安装、系统优化调整、常用软件安装等;

  • 3>在C盘根目录下创建Sysprep文件夹,放入企业部署工具(Deploy.cab)中的相应各文件;

  • 4>使用Setupmgr.exe创建自动应答文件;

  • 5>运行Sysprep.exe来封装当前系统为系统映像;

  • 6>关闭计算机,利用第三方软件复制下这个系统映像(C盘全部),一般使用GHOST;

  • 7>利用网络或其他介质(光盘)复制该映像到其他计算机进行部署。


1.3.2 系统封装

做完上节中步骤的前4步,就可以进行对系统的封装了,运行C盘根目录下创建Sysprep文件夹中的Sysprep.exe:

这是一个很简洁的界面,背后却包含着很高的技术含量。


“不重置激活的宽限期”,将以当前系统的激活剩余时间为主,做封装的系统是如果是免激活的Windows,这一项应选中。


“使用最小化安装”,在XP以后的版本中,系统可以以“欢迎使用”方式安装,也可以使用经典的模式即“最小化安装”模式进行安装,一般选中“使用最小化安装”。


“不重新产生安全标识符”,即不重新产生SID,以当前系统的SID为准,这会一定程度的加快封装部署速度,但是会令部署后的系统产生不稳定,不建议选中。


“检测非即插即用硬件”,这会令系统强行检测非即插即用硬件,不建议选中。


“关机模式”,用来设定执行完封装以后要执行什么,有“关机”、“重新启动”和“退出”三种模式。


选择完毕后,单击“重新封装”,Sysprep将当前系统自动封装为系统映像。


系统映像封装完毕后,无论是自动还是手动,重启计算机后,直接用带GHOST工具的光盘由光盘直接启动计算机,使用GHOST备份当前C盘系统磁盘映像。


备份完毕后,我们就得到了可以用来部署在其他计算机上的系统映像了。使用光盘或者网络等介质,将这个磁盘映像再次使用GHOST恢复在其他计算机的C盘上,被恢复的计算机启动时会自动开始部署系统。


1.4 综述


本章主要陈述了关于Windows操作系统的基本封装与部署的实现,微软的企业部署工具的效率和自动化程度相当高,封装和部署过程都比较简单。


但现在有一个很重要的问题,按照微软企业部署工具中Deploy.chm中的简述,企业部署工具对于源计算机和目标计算机需要有相同HAL(硬件抽象层)。


所谓HAL,是由硬件制造商提供的一种薄层软件,为操作系统高层隐藏或抽象硬件差异。通过 HAL 提供的筛选器,不同类型的硬件看起来与操作系统其余的硬件很相似。这样允许操作系统从一个硬件平台移植到另一个硬件平台。HAL 还提供了允许单个设备驱动器在所有的平台上支持同样设备的例程。


封装好的系统在部署到硬件配置差异较大的计算机中时,特别是跨平台的计算机(Intel CPU+Intel主板做的映像部署到AMD CPU+nVIDIA主板上时),会由于HAL的差异而造成各种各样的不稳定乃至挡机,这就和要运用封装部署方式来快速安装系统的初衷不一致了。如果不能有良好的兼容性,即使能快速安装系统也完全是徒劳。


在随后的一章里,将完美解决这个问题,让对硬件平台有依赖的系统封装部署,变为只对硬件配置没有依赖的“万能的”封装部署。


2.Unlimited万能封装与部署的实现


2.1 突破硬件限制的三个问题


2.1.1计算机电源管理模式

不同计算机的电源管理是不一样的,共有Standard、ACPI Uniprocessor、ACPI Multiprocessor、MPS Uniprocessor、MPS Multiprocessor、Compaq SystemPro、ACPI这7种,这7种电源管理模式分别适用于7种类型的计算机。

截止Windows Server 2003的企业部署工具,运用SYSPREP有一个限制,就是仅适用于用于封装的源计算机和进行部署的目标计算机必须具有相同硬件抽象层 (HAL)。


没有相同的HAL,会造成电源管理模式不能正确判断。网络中提出了不用的HAL检测解决方案,如ACPI封包、死性不改的电源模式等等。但是这些都不能做到100%的电源判断正确,而且检测会需要额外的文件,并且可能多次重启计算机,耗费了时间。

问题1,怎么让Sysprep突破不能自动检测电源管理的限制?


2.1.2计算机硬盘


计算机硬盘的发展可谓迅速。容量的提升,个人计算机硬盘容量从97年以前的个位数容量,突破到2007年现在的三位数容量。硬盘接口也一直在改变,从IDE到SATA,再从SATA到SATAII,从前一直在服务器上使用的SCSI磁盘技术和RAID磁盘阵列技术也渐渐的被使用到个人计算机中。(IDE属于并口硬盘,SATA和SCSI都属于串口硬盘,RAID属于硬盘阵列技术)。

在部署过程中,由于磁盘类型不同,需要不同的硬盘驱动(一般都是关于串口磁盘和磁盘阵列的驱动)。如果部署过程中不能正确加载硬盘驱动,则会造成不能进入系统甚至不能启动。

问题2,如何突破S&R&S(SATA & RAID & SCSI)硬盘类型的限制?


2.1.3驱动残留


进行封装的源计算机如果和进行部署的目标计算机硬件差异很大,例如AMD CPU+nVIDIA主板的源计算机做的系统映像部署到Intel CPU+Intel主板的机器上,在源计算机上装载的驱动程序肯定是在目标计算机上用不到了。即使目标计算机和源计算机硬件差异不大,但硬件技术差异很大,例如Intel CPU+Intel主板的源计算机做的系统映像部署到Intel CPU+Intel主板的机器上,源计算机为Intel 865主板,而目标计算机为945主板,源计算机上的驱动也是铁定用不到的。

这些驱动的残留不仅仅是会留下系统垃圾的问题,如果源计算机上的驱动自动强行去识别目标计算机上的硬件,很有可能会造成系统的不稳定乃至蓝屏崩溃。

问题3,如何突破不同硬件驱动冲突的限制?


2.2 突破HAL限制


2.2.1 Longhorn的启示


Windows Server 2003之前,Sysprep受到“必须源计算机与目标计算机有着相同的HAL”的限制,在HAL不相同的时候,不能正确判断计算机电源管理模式。


从2003年Windows Server 2003发布到2006年底Windows Vista的发布中的3年中,微软在研发Vista的时候,发布了以内部研发编号命名的

Windows Longhorn测试版。


Windows Longhorn与以往的Windows在启动时有着一定的区别。


第一,NTLDR 有一定区别,提供了“/detecthal” 接口;


第二,BOOT.INI也支持“/detecthal”参数,以实现与NTLDR的结合;


第三,INF文件夹中有了“dtecthal.inf”, 提供各种HAL类型检测的参数说明。


有了这三个文件,可以让计算机在开机启动时即自动检测 HAL,从而可以自动判断电源管理选项。


2.2.2 移植Longhorn的HAL判断


现今大多数人还是以使用Windows 2000/XP为主,所以,即使Longhorn的HAL判断再怎么强悍,不能移植到2000/XP中,也就不能使用。

以下是在2000/XP总移植并使用Longhorn的HAL判断的具体方法:

1>从系统中提取相应的HAL文件包:(WIN2000在SP4.CAB、WINDOWS XP SP2在SP2.CAB中)

halacpi.dll

halapic.dll

halmps.dll

halaacpi.dll

halmacpi.dll

hal.dll

ntkrnlmp.exe

ntkrnlpa.exe

ntkrpamp.exe

ntoskrnl.exe


提取完毕后将hal.dll更名为halstnd.dll,ntoskrnl.exe更名为ntkrnlup.exe;


2>将上述相应的HAL文件包拷贝到准备封装的系统的%Windir%\SYSTEM32\下;


3>将Longhorn的“dtecthal.inf”拷贝到准备封装的系统的%Windir%\INF\下;


4>修改C:\BOOT.INI


在准备封装的系统后面加上 /DETECTHAL参数如:

[boot loader]

timeout=0

default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /detecthal


5>将LONGHORN版本的NTLDR拷贝到从C:\,覆盖原有的NTLDR;


6>删除准备封装的系统的HAL信息,删除注册表中以下键值,如果提示权限不足不能删除,则可用setacl.exe来修改权限再删除。


HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\ACPI_HAL

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\Root\ACPI_HAL

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Enum\ACPI_HAL

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Enum\Root\ACPI_HAL

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI_HAL

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL


至此,突破了HAL限制的系统就已经准备完毕。由于这个技术本身就出自微软,所以对电源管理的判断几乎是100%。


突破HAL限制的系统可以部署在任何HAL环境的计算机上,不再有“源计算机和目标计算机需有相同的HAL”的限制。


2.1.1节中提出的问题完美解决


2.3 突破S&R&S 硬盘限制


确定目标计算机上可能用到的所有大量存储控制器,对于可能存在于目标计算机上的每个大量存储控制器,创建其硬件 ID 的列表。


2.3.1对于在 Windows 产品 CD 中提供的大量存储控制器


可以创建具有以下部分的 Sysprep.inf 文件:


[SysprepMassStorage]

hardware_id = path_to_device_inf


其中:


hardware_id


在设备的 .inf 文件中指定的即插即用 ID。


path_to_device_inf


.inf 文件的路径,该文件中包含待安装控制器的即插即用 ID。


例如,要支持 Windows XP 自带的不同 IDE 控制器(PCI 和 Intel),该部分如下所示:


[SysprepMassStorage]


PCI\VEN_8086&DEV_1222 = "%WINDIR%\inf\mshdc.inf"

PCI\VEN_8086&DEV_1230 = "%WINDIR%\inf\mshdc.inf"

PCI\VEN_8086&DEV_7010 = "%WINDIR%\inf\mshdc.inf"

PCI\VEN_8086&DEV_7111 = "%WINDIR%\inf\mshdc.inf"

PCI\VEN_8086&DEV_2411 = "%WINDIR%\inf\mshdc.inf"

PCI\VEN_8086&DEV_2421 = "%WINDIR%\inf\mshdc.inf"

PCI\VEN_8086&DEV_7199 = "%WINDIR%\inf\mshdc.inf"


2.3.2 对于 Windows 产品 CD 上没有提供的大量存储控制器


将目标计算机上的大量存储控制器的驱动程序文件复制到您计算机上的文件夹中 – 例如,复制到主计算机硬盘驱动器上的 %SYSTEMDRIVE%\pnpdrvrs\storage 中。


按以下格式向 [SysprepMassStorage] 部分中添加几行内容:

hardware_id = path_to_device_inf, disk_directory, disk_description, disk_tag


其中:


hardware_id


在设备的 .inf 文件中指定的即插即用 ID。


path_to_device_inf


.inf 文件的路径,该文件中包含待安装控制器的即插即用 ID。


disk_directory


第三方提供的软盘上的文件夹名称,该文件夹中包含大量存储驱动程序的副本。


disk_description


在第三方提供的 Txtsetup.oem 文件中指定的软盘说明。


disk_tag


在第三方提供的 Txtsetup.oem 文件中指定的软盘的磁盘标记。


将驱动程序文件放置到由 Sysprep.inf 中 [SysprepMassStorage] 部分指定的位置。例如,要支持新的 Qlogic 驱动程序,如果将文件复制到

C:\Drivers\Storage 文件夹,则添加如下行:


[SysprepMassStorage]

PCI\VEN_1077&DEV_1080 = "C:\Drivers\Storage\qlogic\qlogic.inf", "C:\Drivers\Storage\qlogic", "Qlogic Software Disk",

"C:\Drivers\Storage\qlogic\qlogic"


2.3.3 突破S&R&S实例


1>收集需要的srs驱动,方便期间,直接下载DPS提供的massstorage 驱动:


http://www.driverpacks.net/DriverPacks/download.php?pag=m


2>解压驱动到c:\drivers 。


3>编辑sysprep.ini 加入以下内容


InstallFilesPath=C:\sysprep\i386


然后在[SysprepMassStorage]段中添加需要的串口磁盘驱动,根据DPS驱动包的说明书,一般只集成Intel、nVIDIA、Uli、VIA、SiS、AMD的串口磁盘驱动即可,在对应的驱动包中的inf文件中,可以获得硬件的即插即用ID。


例如:


[SysprepMassStorage]

PCI\VEN_1022&DEV_7469=c:\drivers\m\am\AMDEIDE.inf

PCI\VEN_1002&DEV_4349=c:\drivers\m\at\atiide.inf

PCI\VEN_10B9&DEV_5215=c:\drivers\m\au\1\ALIIDE.INF

PCI\VEN_10B9&DEV_5219=c:\drivers\m\au\1\ALIIDE.INF

PCI\VEN_10B9&DEV_5229=c:\drivers\m\au\1\ALIIDE.INF

PCI\VEN_10B9&DEV_5228=c:\drivers\m\au\2\m5228.INF

PCI\VEN_10B9&DEV_5281=c:\drivers\m\au\2\m5281.inf

PCI\VEN_10B9&DEV_5287=c:\drivers\m\au\3\ulisata.inf

PCI\VEN_10B9&DEV_5288=c:\drivers\m\au\4\ULISATA.INF

PCI\VEN_10B9&DEV_5289=c:\drivers\m\au\5\ULISATA.INF

PCI\VEN_8086&DEV_2652&CC_0104=c:\drivers\m\in\1\iastor.inf

PCI\VEN_8086&DEV_27C3&CC_0104=c:\drivers\m\in\1\iastor.inf

PCI\VEN_8086&DEV_2682&CC_0104=c:\drivers\m\in\1\iastor.inf

PCI\VEN_8086&DEV_27C6&CC_0104=c:\drivers\m\in\1\iastor.inf

PCI\VEN_8086&DEV_2822&CC_0104=c:\drivers\m\in\1\iastor.inf

PCI\VEN_8086&DEV_2652&CC_0106=c:\drivers\m\in\1\iaahci.inf

PCI\VEN_8086&DEV_2653&CC_0106=c:\drivers\m\in\1\iaahci.inf

PCI\VEN_8086&DEV_27C1&CC_0106=c:\drivers\m\in\1\iaahci.inf

PCI\VEN_8086&DEV_27C5&CC_0106=c:\drivers\m\in\1\iaahci.inf

PCI\VEN_8086&DEV_2681&CC_0106=c:\drivers\m\in\1\iaahci.inf

PCI\VEN_8086&DEV_2821&CC_0106=c:\drivers\m\in\1\iaahci.inf

PCI\VEN_8086&DEV_24DF&CC_0104=c:\drivers\m\in\1\O\iastor.inf

PCI\VEN_8086&DEV_25B0&CC_0104=c:\drivers\m\in\1\O\iastor.inf

PCI\VEN_10DE&DEV_008E=c:\drivers\m\N\TM\nvatabus.inf

PCI\VEN_10DE&DEV_00D5=c:\drivers\m\N\TM\nvatabus.inf

PCI\VEN_10DE&DEV_00EE=c:\drivers\m\N\TM\nvatabus.inf

PCI\VEN_10DE&DEV_00E3=c:\drivers\m\N\TM\nvatabus.inf

PCI\VEN_10DE&DEV_0036=c:\drivers\m\N\TM\nvatabus.inf

PCI\VEN_10DE&DEV_003E=c:\drivers\m\N\TM\nvatabus.inf

PCI\VEN_10DE&DEV_0054=c:\drivers\m\N\TM\nvatabus.inf

PCI\VEN_10DE&DEV_0055=c:\drivers\m\N\TM\nvatabus.inf

PCI\VEN_10DE&DEV_0266=c:\drivers\m\N\TM\nvatabus.inf

PCI\VEN_10DE&DEV_0267=c:\drivers\m\N\TM\nvatabus.inf

PCI\VEN_10DE&DEV_036F=c:\drivers\m\N\TM\nvatabus.inf

PCI\VEN_10DE&DEV_037E=c:\drivers\m\N\TM\nvatabus.inf

PCI\VEN_10DE&DEV_037F=c:\drivers\m\N\TM\nvatabus.inf

PCI\VEN_10DE&DEV_03F6=c:\drivers\m\N\TM\nvatabus.inf

PCI\VEN_10DE&DEV_03F7=c:\drivers\m\N\TM\nvatabus.inf

PCI\VEN_10DE&DEV_03E7=c:\drivers\m\N\TM\nvatabus.inf

PCI\VEN_1039&DEV_0181=c:\drivers\M\SI\1\SISRaid1.INF

PCI\VEN_1039&DEV_0180=c:\drivers\M\SI\2\SISRaid.INF

PCI\VEN_1039&DEV_0182=c:\drivers\M\SI\3\SISRaid2.INF

PCI\VEN_1106&DEV_3349&CC_0104=c:\drivers\M\V\1\VIAMRAID.INF

PCI\VEN_1106&DEV_6287&CC_0106=c:\drivers\M\V\1\VIAMRAID.INF

PCI\VEN_1106&DEV_0591&CC_0104=c:\drivers\M\V\1\VIAMRAID.INF

PCI\VEN_1106&DEV_3249&CC_0104=c:\drivers\M\V\1\VIAMRAID.INF

PCI\VEN_1106&DEV_3149&CC_0104=c:\drivers\M\V\1\VIAMRAID.INF

PCI\VEN_1106&DEV_3164&CC_0104=c:\drivers\M\V\1\VIAMRAID.INF

PCI\VEN_1106&DEV_0581&CC_0104=c:\drivers\M\V\1\VIAMRAID.INF

PCI\VEN_1106&DEV_7372&CC_0104=c:\drivers\M\V\1\VIAMRAID.INF

PCI\VEN_1106&DEV_4149=c:\drivers\M\V\2\viapide.inf

PCI\VEN_1106&DEV_0571=c:\drivers\M\V\3\vminiide.inf

PCI\VEN_1106&DEV_3149&CC_0101=c:\drivers\M\V\3\vminiide.inf

PCI\VEN_1106&DEV_0591&CC_0101=c:\drivers\M\V\3\vminiide.inf

PCI\VEN_1106&DEV_5337&CC_0101=c:\drivers\M\V\3\vminiide.inf

PCI\VEN_1106&DEV_3349&CC_0101=c:\drivers\M\V\3\vminiide.inf

PCI\VEN_1106&DEV_5287&CC_0101=c:\drivers\M\V\3\vminiide.inf

PCI\VEN_1106&DEV_3164&CC_0101=c:\drivers\M\V\3\vminiide.inf

PCI\VEN_1106&DEV_0581&CC_0101=c:\drivers\M\V\3\vminiide.inf

PCI\VEN_1106&DEV_5324&CC_0101=c:\drivers\M\V\3\vminiide.inf

PCI\VEN_104B&DEV_1040=c:\drivers\M\VM\vmscsi.inf


4>在c:\sysprep 目录下建立 i386\$oem$目录 ,在c:\sysprep\i386\$oem$ 中建立cmdlines.txt 文件,在文件中加入


[Commands]


"c:\sysprep\sysprep -clean"

这样就会在最小化安装的过程中禁用所有因为在目标计算机上不存在而未安装的大量存储控制器。

至此,一个突破了S&R&S限制的系统映像准备完毕。


执行sysprep进行封装,在封装的过程中,系统会自动安装 srs驱动。在最小化安装的时候会删除多余的驱动。


2.1.2节中的问题,这里也就已经解决了。


2.4 多余驱动的卸载


做封装所用的计算机中所使用的驱动程序,在被部署的计算机上大多数不再有用(除非都被部署在相同硬件配置的计算机上)。所以,我们要一一删除源计算机中的这些驱动,以免残留的驱动造成部署的不正常。

卸载驱动,在“设备管理器”(我的电脑,属性,硬件,设备管理器)中列出所有设备,然后一一卸载。

在设备管理器中,可以看到当前正在使用的所有硬件设备。


1>常规驱动的卸载


除“IDE ATA/ATAPI控制器”和“计算机”以外的其他设备,一一展开,然后卸载即可。


2>更改IDE模式


由于不同计算机的IDE控制器差异比较大,如果出现错误的识别,将会出现不能开机的情况,所以,这里预先将IDE控制器设置为“标准双通道”,在部署时,安装程序将自动寻找和起匹配的IDE控制器驱动程序。


3>计算机电源管理


计算机电源管理分为许多种,可以适用于不同类别的计算机。如果电源管理判断不正确,将会造成计算机的不正常。在计算机识别电源管理之前,需要将电源管理设为标准模式以基本适用于所有的计算机,这种标准模式仅仅可以保证计算机正常启动,但是不能保证最高效的运行。

将计算机的电源管理模式设置为Standard PC以后,在部署时,由于我们适用了Longhorn的HAL自动判断,计算机将会在启动时自动修改

Standard PC为被部署计算机的电源管理模式。


至此,突破了硬件限制的系统映像也被修改了出来,系统映像可以被部署到不同硬件配置的机器中了。


2.1.3节中的问题被解决。


2.5 综述


在不同硬件配置的机器中适用系统部署受到种种制约,本章分为3块解决了映像系统万能部署的3条限制。


Longhron的自动HAL判断,解决了源计算机与目标计算机在不同HAL模式时不能进行部署的问题。


S&R&S驱动的集成,解决了系统部署在不同硬盘模式的情况下进行部署的问题。


驱动的卸载,解决了系统部署在不同硬件配置的计算机下进行的问题。


这3条限制被突破以后,系统部署时,不必再遵循源计算机和目标计算机必须相同配置的原则,真正可以实现无限制的“万能部署”。


3.Auto 自动封装与部署的实现


3.1 自动封装与部署的意义和理论实现


3.1.1自动封装的意义


1>封装测试需要很多次的重复

封装一个可以部署的系统映象并不难,但是封装一个比较完美的可以满足各项要求的系统映象却是一个特别花费时间和精力的工作,需要很多次的重复制作。仅上一章中所提到的各种限制的突破,如果每次测试都时候都做一次,也会消耗很多的时间。

能不能让这些手工的机械化的操作变成自动的?


2>频繁的手工操作容易造成错误

即使是一个对封装十分了解的人,在多次的执行封装中,也难免会出现遗漏和失误,毕竟封装的步骤一环扣一环,虽然不繁琐也难免会造成错误。


怎么让封装的流程变的自动而无需人手工参与?


3>封装的普及

很多IT工作者并不十分了解封装与部署,却一样想做出自己的系统映象用来部署,由于工作等原因实在没有时间去系统的学习,难道封装只能掌握在少数人手中?

怎么让封装更为普及化,让没有太多封装知识和经验的人也能迅速的进行系统封装?


3.1.2 系统封装和部署的详细流程


1>系统安装、补丁、软件等;


[封装]:


2>在系统光盘上找到Deploy.cab,解压到%system%\Sysprep;


3>运行Setupmgr.exe创建无人职守部署应答文件Sysprep.inf;


4>突破HAL限制,把于HAL相关的文件都放置在%windir%下相应位置,提取Longhorn的ntldr1,修改boot.ini;


5>突破S&R&S限制,把所有串口磁盘和磁盘阵列驱动都放置在%systemdrive%\Drivers下,在Sysprep.inf中的[SysprepMassStorage]段下添加磁盘驱动位置等信息;


6>卸载各种驱动,修改IDE控制器为标准双通道,修改计算机电源管理为Standard PC;


7>运行Sysprep.exe进行系统封装;


8>关闭封装源计算机;


9>DOS模式启动封装源计算机,使用GHOST备份下封装完的系统映象;


[部署]:


10>使用GHOST恢复系统映象到部署目标计算机;


11>部署目标计算机,系统运行%windir%\system32\setup.exe来部署计算机映象。


3.1.3 自动封装的理论实现

纵观流程,封装过程基本上可以分为相关文件的复制、对文件的调整、相关软件的运行、对系统的调整四部分。

相关文件的复制,简单说,就是把应该放在哪儿的文件放在哪儿,这些文件都是特定的,进行封装必然要用到这些文件,所以,可以预先把这些文件提取出来放置在一个另外的文件夹中,然后用WinRAR压缩为自解压文件并设定解压位置,这样到用这些文件的时候直接双击自解压包,这些要用到的文件就会各自解压到自己应该在的位置上。


对文件的调整,主要是替换Longhorn的ntldr,以及修改boot.ini,这个我们可以用命令行修改系统自身的ntldr为ntldr.bak,修改系统自身的boot.ini为boot.ini.bak,然后把 Longhorn的ntldr和修改好的boot.ini复制到原系统ntldr和boot.ini的位置。当系统部署完毕后再把原始的ntldr和boot.ini替换回来,虽然替换回原有的不是必须的,但是个人认为,保持原系统的原始性一定程度上有利于系统的稳定性。


相关软件的运行,这个主要是Sysprep,如果每次要为Sysprep设置相同的执行方式,那么Sysprep提供很多的运行参数,添加参数运行Sysprep,就免去了每次都要去点击封装选项的问题。


对系统的调整,主要是卸载驱动以及调整计算机电源管理和IDE控制器。虽然这个可以使用自动化实现,但是个人认为这个手工还是比较保险。


3.2 实现自动封装与部署


3.2.1 文件的自动复制


建立如下目录,以D:\ES文件夹为例:


D:\ES\ Sysprep\ cvtarea.exe

D:\ES\ Sysprep\ oformat.com

D:\ES\ Sysprep\ Setupcl.exe

D:\ES\ Sysprep\ Sysprep.exe

D:\ES\ Sysprep\ Sysprep.inf

D:\ES\ Sysprep\ SetACL.exe

D:\ES\Sysprep\AutoSysprep.cmd

D:\ES\Sysprep\cmdline.reg

D:\ES\WINDOWS\ inf\ dtecthal.inf

D:\ES\WINDOWS\ system32

D:\ES\WINDOWS\ system32\ halaacpi.dll

D:\ES\WINDOWS\ system32\ halacpi.dll

D:\ES\WINDOWS\ system32\ halapic.dll

D:\ES\WINDOWS\ system32\ halmacpi.dll

D:\ES\WINDOWS\ system32\ halmps.dll

D:\ES\WINDOWS\ system32\ halstnd.dll

D:\ES\WINDOWS\ system32\ mscomctl.ocx

D:\ES\WINDOWS\ system32\ ntkrnlmp.exe

D:\ES\WINDOWS\ system32\ ntkrnlpa.exe

D:\ES\WINDOWS\ system32\ ntkrnlup.exe

D:\ES\WINDOWS\ system32\ ntkrpamp.exe

D:\ES\WINDOWS\ AllUsrRun.cmd

D:\ES\ Drivers

D:\ES\ bootL.ini

D:\ES\ ntldrL


说明:


1>ES文件夹模拟C盘根目录,所有文件排布和此后要复制到C盘中的排布是一样的;


2>Sysprep中的所有文件在第一章中介绍过,Sysprep文件夹将在系统部署最小化安装时自动删除,SetACL.exe是提升权限以修改注册表的工具,AutoSysprep.cmd是自动进行封装所用的批处理,cmdline.reg将在3.2.3中详细说明;


3>inf和system32文件夹中的各文件在第二章中介绍过,用于Longhorn的自动HAL判断;


4>AllUsrRun的用处后面详细介绍;


5>bootL.ini是为HAL自动判断所写好的boot.ini文件,内容为:

[boot loader]

timeout=30

default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /detecthal


6>ntldrL是Longhorn的系统引导文件,同样用于自动HAL判断。


7>Drivers中放置串口磁盘和磁盘阵列驱动


文件打包:


选择最常用的压缩工具WinRAR来进行打包ES文件夹中的所有文件, 设定默认解压缩路径为C:\并且设置解压模式为“隐藏启动对话框”和“覆盖所有文件”,这几个选项的设定可以保证文件不会复制到错误的位置。


3.2.2 自动封装的实现


AutoSysprep.cmd的内容如下(以封装XP系统为例):


rem 自动封装,静默模式、最小化、不重置激活事件、清空事件查看器日志、不重启计算机


start /wait c:\sysprep\sysprep.exe -quiet -mini -activated -reseal -noreboot


rem 导入cmdline.reg键值(3.2.3中介绍)


start /wait regedit.exe /s c:\Sysprep\cmdline.reg


rem 取消XP的ntldr权限,改名为ntldrXP,再恢复其权限


attrib c:\ntldr -h -s -r


ren c:\ntldr ntldrxp


attrib c:\ntldrxp +h +s +r


rem 取消Longhron的ntldrL的权限,改名为ntldr,再恢复其权限


attrib c:\ntldr1 -h -s -r


ren c:\ntldr1 ntldr


attrib c:\ntldr +h +s +r


rem取消XP的boot.ini权限,改名为bootXP.ini,再恢复其权限


attrib c:\boot.ini -h -s -r


ren c:\boot.ini bootxp.ini


attrib c:\bootxp.ini +h +s +r


rem 取消Longhron的bootL.ini的权限,改名为boot.ini,再恢复其权限


attrib c:\boot1.ini -h -s -r


ren c:\boot1.ini boot.ini


attrib c:\boot.ini +h +s +r


rem 进入Sysprep文件夹内


cd\


cd\sysprep


rem 使用SetACL来取消有关源计算机HAL的注册表信息的权限,以便随后的修改


setacl MACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL /registry /grant everyone /full

setacl MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL /registry /grant everyone /full

setacl MACHINE\SYSTEM\ControlSet002\Enum\ACPI_HAL /registry /grant everyone /full

setacl MACHINE\SYSTEM\ControlSet002\Enum\Root\ACPI_HAL /registry /grant everyone /full

setacl MACHINE\SYSTEM\ControlSet003\Enum\ACPI_HAL /registry /grant everyone /full

setacl MACHINE\SYSTEM\ControlSet003\Enum\Root\ACPI_HAL /registry /grant everyone /full

setacl MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI_HAL /registry /grant everyone /full

setacl MACHINE\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL /registry /grant everyone /full

rem 删除源计算机的HAL注册表信息

reg delete HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL /f

reg delete HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL /f

reg delete HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\ACPI_HAL /f

reg delete HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\Root\ACPI_HAL /f

reg delete HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Enum\ACPI_HAL /f

reg delete HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Enum\Root\ACPI_HAL /f

reg delete HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI_HAL /f

reg delete HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL /f

rem 以下用于Intel CPU + Intel 主板的源计算机,Intel的这两组键值容易造成部署到非Intel硬件计算机中的蓝屏事故

rem使用SetACL来取消有关当前Intel 主板的注册表信息的权限,以便随后的修改

setacl MACHINE\SYSTEM\ControlSet001\Services\IntelIde /registry /grant everyone /full

setacl MACHINE\SYSTEM\ControlSet002\Services\IntelIde /registry /grant everyone /full

setacl MACHINE\SYSTEM\ControlSet003\Services\IntelIde /registry /grant everyone /full

setacl MACHINE\SYSTEM\CurrentControlSet\Services\IntelIde /registry /grant everyone /full

rem使用SetACL来取消有关当前Intel CPU的注册表信息的权限,以便随后的修改

setacl MACHINE\SYSTEM\ControlSet001\Services\intelppm /registry /grant everyone /full

setacl MACHINE\SYSTEM

rem 使用SetACL来取消有关源计算机HAL的注册表信息的权限,以便随后的修改

setacl MACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL /registry /grant everyone /full

setacl MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL /registry /grant everyone /full

setacl MACHINE\SYSTEM\ControlSet002\Enum\ACPI_HAL /registry /grant everyone /full

setacl MACHINE\SYSTEM\ControlSet002\Enum\Root\ACPI_HAL /registry /grant everyone /full

setacl MACHINE\SYSTEM\ControlSet003\Enum\ACPI_HAL /registry /grant everyone /full

setacl MACHINE\SYSTEM\ControlSet003\Enum\Root\ACPI_HAL /registry /grant everyone /full

setacl MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI_HAL /registry /grant everyone /full

setacl MACHINE\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL /registry /grant everyone /full

rem 删除源计算机的HAL注册表信息

reg delete HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL /f

reg delete HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL /f

reg delete HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\ACPI_HAL /f

reg delete HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\Root\ACPI_HAL /f

reg delete HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Enum\ACPI_HAL /f

reg delete HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Enum\Root\ACPI_HAL /f

reg delete HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI_HAL /f

reg delete HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL /f

rem 以下用于Intel CPU + Intel 主板的源计算机,Intel的这两组键值容易造成部署到非Intel硬件计算机中的蓝屏事故

rem使用SetACL来取消有关当前Intel 主板的注册表信息的权限,以便随后的修改

setacl MACHINE\SYSTEM\ControlSet001\Services\IntelIde /registry /grant everyone /full

setacl MACHINE\SYSTEM\ControlSet002\Services\IntelIde /registry /grant everyone /full

setacl MACHINE\SYSTEM\ControlSet003\Services\IntelIde /registry /grant everyone /full

setacl MACHINE\SYSTEM\CurrentControlSet\Services\IntelIde /registry /grant everyone /full

rem使用SetACL来取消有关当前Intel CPU的注册表信息的权限,以便随后的修改

setacl MACHINE\SYSTEM\ControlSet001\Services\intelppm /registry /grant everyone /full

setacl MACHINE\SYSTEM\ControlSet002\Services\intelppm /registry /grant everyone /full

setacl MACHINE\SYSTEM\ControlSet003\Services\intelppm /registry /grant everyone /full

setacl MACHINE\SYSTEM\CurrentControlSet\Services\intelppm /registry /grant everyone /full

rem 删除有关Intel主板的注册表信息

reg delete MACHINE\SYSTEM\ControlSet001\Services\IntelIde /f

reg delete MACHINE\SYSTEM\ControlSet002\Services\IntelIde /f

reg delete MACHINE\SYSTEM\ControlSet003\Services\IntelIde /f

reg delete MACHINE\SYSTEM\CurrentControlSet\Services\IntelIde /f

rem 删除有关Intel CPU的注册表信息

reg delete MACHINE\SYSTEM\ControlSet001\Services\intelppm /f

reg delete MACHINE\SYSTEM\ControlSet002\Services\intelppm /f

reg delete MACHINE\SYSTEM\ControlSet003\Services\intelppm /f

reg delete MACHINE\SYSTEM\CurrentControlSet\Services\intelppm /f


3.2.3 部署过程的调整


部署过程,其实就是系统映象恢复到目标计算机上,目标计算机启动,系统会自动运行%windir%\system32\Setup.exe来部署系统。


如果我们想在Setup.exe前或者后运行点什么,该怎么办?例如,我们要在Setup.exe运行后将原来系统的ntldr和boot.ini恢复回来,而不是使用Longhorn的,怎么办?


经过对比封装前和封装后的注册表,发现目标计算机启动后,将要进行部署时并非是一定要运行%windir%\system32\Setup.exe,而是运行系统注册表中“HKEY_LOCAL_MACHINE\SYSTEM\Setup”分支下的“CmdLine”键值所指定的应用程序。在系统封装完成时,“HKEY_LOCAL_MACHINE\SYSTEM\Setup”分支下“CmdLine”键值被修改为“setup.exe”,这就是为什么目标计算机启动后会运行setup.exe来部署系统的原因。


我们自己写一个批处理,批处理的内容包括运行setup.exe和恢复原有ntldr、boot.ini,把这个批处理的名字定名为“AllUsrRun.cmd”,并且把“HKEY_LOCAL_MACHINE\SYSTEM\Setup”分支下“CmdLine”的键值由“setup.exe”修改为“AllUsrRun.cmd”。这样源计算机启动的时候并

非运行setup.exe来部署系统,而是运行AllUsrRun.cmd。


AllUsrRun.cmd的内容如下:

rem 把我们修改的CmdLine键值重新置空

reg delete HKEY_LOCAL_MACHINE\SYSTEM\setup /v cmdline /f

rem 部署系统,全新安装、最小化执行

setup.exe -newsetup –mini

rem 修改Longhorn的ntldr权限,并删除

attrib c:\ntldr -h -s -r

del c:\ntldr

rem 修改先前备份的XP的ntldrXP权限,改名回ntldr,恢复权限

attrib c:\ntldrXP -h -s -r

ren c:\ntldrXP ntldr

attrib c:\ntldr +h +s +r

rem 修改Longhorn的boot.ini权限,并删除

attrib c:\boot.ini -h -s -r

del c:\boot.ini

rem 修改先前备份的XP的bootXP.ini权限,改名回boot.ini,恢复权限

attrib c:\bootXP.ini -h -s -r

ren c:\bootXP.ini boot.ini

attrib c:\boot.ini +h +s +r

rem修改多启动菜单等待时间为5秒

bootcfg /timeout 5


这样部署过程就被我们调整的如我们所愿了。


3.3 综述


经过3.2节中的几步,自动封装和部署基本被我们实现。


3.1.2中[封装]段的步骤被简化为:


1>运行自动解压缩,把文件解压到相应位置;


2>卸载驱动,手动修改IDE控制器和计算机电源管理;


3>运行%systemdrive%\Sysprep文件夹中的AutoSysprep.cmd封装系统;


4>重启计算机,使用GHOST备份系统映象。


3.1.2中[部署]段的步骤变为:


1>恢复系统映象到目标计算机;


2>目标计算机启动,自动运行AllUsrRun.cmd部署系统并还原系统原始的ntldr和boot.ini。


如此以来,系统封装将变的十分简单,不仅给多次测试封装系统带来很大的方便,还能让没有太多封装经验的人迅速封装系统。

系统自动化封装和部署完美实现。


结论


全文分3章讲述了封装部署方法快速安装和部署操作系统的方法。


从第一章的基本实现到第二章的万能实现,再到第三章自动实现,一步步实现了从最基本封装部署到全自动封装部署。


从覆盖面上讲,从最原始的微软所规定的“源计算机与目标计算机必须有相同的HAL”到最终的任意HAL源计算机部署到任意HAL目标计算机,覆

盖面被有效的提高。理论上讲,部署方法,可以适用于任何计算机。

从易用性上讲,从最早的手工复制文件、手工修改注册表、手工修改各种配置文件,到最终的“Easy Sysprep”只需在图形界面设置好然后单击一下“开始封装”即可封装系统,不可说不是个比较大的进步和跨越。


经过本文中3章的研究工作,封装部署已经变的拥有更大的适用性并拥有更简单的可用性,系统封装部署这种可以有效的提高计算机维护人员工作效率的方法,必将得到最广泛的认可与应用!


现在大家对系统封装,因该有了一定的认识,资料的收集和整理不容易,希望大家有所收获!


原文地址 http://blogs.itecn.net/blogs/jiayu/archive/2008/03/15/34207.aspx