weitom1982

向各位技术前辈学习,学习再学习.
posts - 299, comments - 79, trackbacks - 0, articles - 0
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2004 年 9 月
调优的并不总是速度,有时候需要调整应用程序的其他方面,如果应用程序需要调优,要做的第一件事通常是使用剖析程序监控应用程序。但是,剖析并不总是可行的,有时候原因可能很可笑。关注性能的本期文章中, Jack 和 Kirk 讲述了他们最近经历的一件事:他们奉命剖析一个胖客户机,事实上它是如此庞大,根本没有为剖析程序留下空间。

我们从来还没有遇到过调优应用程序内存占用的问题。通常,我们看到的和内存有关的调优要求都涉及到降低垃圾收集的开销,理想情况下可以通过调整堆的大小或者改变垃圾收集算法来解决,如果不行的话,还可以采用各种技术减少内存中的对象。但是,有时候无论分配和垃圾收集的效率如何,应用程序都要占用很多的内存。

减肥中心之旅
最近,我们奉命降低一个胖客户机的内存占用。虽然“胖客户机”一词通常表示普通的 GUI 客户应用程序,而这个客户机却是几近肥胖症。这个客户机在 Windows 平台上运行,处理大小的极限是 2 GB。去掉可执行地址空间和引入各种 JNI 产品所需要的其他空间之后,该应用程序能够使用的最大堆大小大约是 1.2 GB 或者 1.3 GB。不幸的是,某些用户因为要向该应用程序灌输大量的数据,以至于占用的空间常常接近这个极限。最明显的调优方案是转移到 Unix 机器上,但是因为不切实际而被排除掉了——客户更愿意让这个应用程序减肥。

于是,我们的任务就定下来了。对这个胖客户机进行剖析,看看到底是什么占用了这些空间。然后对这些对象减肥,为以后的扩展或者更大的数据量留下空间。我们认为这事很容易。可能要花点时间,因为减少对象的数量通常不能一蹴而就,但是这么大的堆,肯定有很多赘肉能够割掉。我们这样想。

通常的过程
我们开始了通常的内存占用缩减过程:建立测试环境、规定可再现的测试、启动剖析程序、运行测试、分析数据、查找调优的机会。时间不断流逝,我们一直忙个不停……或者说我们是这样认为的。现在,我们进入了“运行测试”阶段,剖析程序趴下了。于是我们再次尝试。又死掉了。我们改变了剖析程序的配置,将开销减到最少,再次尝试。又死掉了。根本就没留下足够容纳剖析程序完全运行的 JVM 堆空间,更不用说生成任何有用的剖析数据了。而我们使用的是一种上等的商业剖析程序,一般是很可靠的,所以我们很吃惊。

试一次,再试一次
没关系,海里有数不清的鱼,现在也有数不清的剖析程序(关于剖析程序的最新评述,请参阅 Resources)。又是一天,又使用了一个剖析程序,怎么样呢?不幸的是,测试过程是惊人的相似。和一号剖析程序差不多在同一点上,二号剖析程序又让 JVM 崩溃了。和一号剖析程序一样,它甚至可以做更多的配置,重新配置,降低开销,去掉更多的数据。但它还是和一号剖析程序一样,也崩溃了。糟糕的是,三号剖析程序也没有什么不同。

巧妙的剖析程序
但是,四号剖析程序有了微妙的变化。对存活对象的快照进行内存分析(忽略对象的创建和垃圾收集,只观察某一点上存活对象的快照),在请求进行快照之前,四号剖析程序根本没有增加 JVM 的开销。成功了!我们的测试第一次在剖析程序运行的时候通过了需要拍摄快照的那个点。我们很高兴。然后我们激活了快照,于是 JVM 崩溃了。

我们又尝试了一次,但是这个剖析程序生成快照需要太多的额外空间。根本无法工作。我们又回到了起点!尽管还有半打商业剖析程序可供尝试,但结果是显然的。应该做一些横向思考了。

具有讽刺意味的是,我们的问题正在于剖析程序本身的复杂性。我们需要某种简单的东西。当然,简单并不意味着开销低,但是既然那些复杂的剖析程序令我们失望,不妨试一试。于是我们开始扫描开放源代码剖析程序。

重新开始

我们首先寻找那些看来是用于内存分析的剖析程序。一号开发源代码内存剖析程序看起来绝对简单,也许过于简单了。输出结果用处不大,只有一个类列表和每个类的对象个数。但无论如何这也算是一个不错的起点。它崩溃了。我们陷入了重走老路的担忧。二号开放源代码剖析程序甚至比一号还简单,虽然它实际上给出了更详细的信息:每个对象都有堆占转储记录,说明对象的大小和所属的类。和其他剖析程序一样,我们用较低的配置尝试,于是可以看到堆转储逐渐增大——大致就是堆的大小,然后,我们看到的是一个 1 GB 的输出文件。我们尝试了它,它击溃了虚拟机。但它确实让我们看到了部分堆转储。

在处理像这种很大的因素时,必须能够判断所需资源的数量级和要花费的时间。转存 1 GB 的文件可能要花很多时间。如果没有考虑到一个操作可能花费多长的时间,您可能错误地认为进程被挂起了,而实际上它仍然在运行,只是要花费转储 1 GB 格式化文本所需要的时间。这个开放源代码剖析程序正在工作,但是第一次测试时我们忽视了给它足够的时间。更遭的是,第一次还没有结束的时候,我们又迫使它进行第二次转储,结果造成了崩溃。所幸的是,我们认识到问题在我们自己而不是剖析程序,有了较多的认识之后,我们再次进行了尝试并取得了成功。

heapprofile 剖析程序

那么,到底哪个剖析程序成功了呢?它就是 Matthias Ernst 编写的“heapprofile”。它仅用了一页 C 代码,使用 Java Virtual Machine Profiler Interface (JVMPI) 把堆转存成最简单的格式。甚至还要自己编译,网站上(请参阅 Resources)没有提供预编译的可执行文件。这种简单性正是我们在这个问题里所需要的。没有任何开销。除了绝对必要的之外,没有使用堆或者 JNI 资源。程序运行的时候它什么也不做,当我需要堆转储的时候,它仅仅遍历一次堆,直接将每个对象的大小和类转存到一个文件,没有在内存中创建任何结构,正是这种结构让其他所有剖析程序击溃了 JVM。

当然,事情还没有完。现在我们需要分析结果数据,使用它确定应用程序所用的对象。幸运的是,输出格式很容易解析。一旦找到了造成问题的对象,我们还需要找到分配这些对象的地方。为了降低开销,我们采用重新编译这几个类的简单策略,在构造函数中放上栈跟踪程序,Jack 的著作(请参阅 Resources)中详细描述了这种技术。这种简单的技术需要在构造函数中创建(而不是抛出)异常。异常中包含分配地点的栈踪迹。然后可以将所有对象的这些栈列成表格。因为多数栈都是相同的,标识调用栈以及链接到每个栈的相关实例个数需要存储的数据并不很多(最多几千个字符串)。

简单而丑陋

这都是些简单的技术,但并没有很高的生产率。我们更愿意使用功能完备的剖析程序输出数据,尤其是因为它们提供的数据更便于分析。我们本来希望从堆的根开始,向下跟踪较大的节,直到发现大量引用堆的对象,但是我们没有选择这个方法。

和通常使用调优技术相比,这次使用的技术比较简陋。但最终我们发现了一些完全不需要的对象,使用一些类的不同实现可以完全消除它们;另一些必需的对象也可以苗条一点,或者压缩到一起,减少其空间需求。对象缩减通常都是如此,胖客户机减肥也没有一定之规。和人类一样,让 Java 应用程序节食也是很困难的事情。也和节食一样,去掉身上多余的脂肪往往比您所想的要花费更长时间。令人遗憾的是,虽然我们从这个胖客户机上刮掉了两百兆字节,但它仍然没有瘦到足以容纳“真正的”内存剖析程序的运行。

结束语

我们曾经在 Unix 讨论组看到这样一个问题 —— “Unix 大师们使用什么编辑文本?”,随后的讨论纷纷开始鼓吹 vi、Emacs 等。但毫无疑问,正确的答案应该是“Unix 大师使用任何能用的工具编辑文本。” Java 平台拥有一些非常杰出的剖析程序。但最终,调优应用程序必须分析数据,无论用何种方法,您必须拿到这些数据。

posted @ 2006-03-31 13:55 高山流水 阅读(66) | 评论 (0)编辑 收藏

 
Java设计模式之复合模式篇
作者:冯睿    本文选自:赛迪网  2003年01月21日

 

自从J2EE出现以来,就大大简化了在Java下的企业级开发。但是随着J2EE越来越普遍地被应用到各个领域中,开发者们渐渐意识到需要一种方法来标准化应用程序的开发过程,他们采用的方法是标准化应用程序的结构层。在结构层通常封装了一些独立于业务逻辑的复杂技术,以便在业务逻辑和底层的架构之间建立起弱连接。无可否认,J2EE是一个很成功的技术,它为一些基本的任务提供了一致的标准,例如数据库连接、分布式应用程序等。但是使用J2EE并不能保证开发人员开发出成功的应用程序。有些人认为J2EE本身就是一种框架技术,但是这种认识是不正确的,我们应该意识到J2EE并没有提供一个能够帮助开发人员开发出高质量应用程序的框架,因此很多有经验的开发人员通过利用设计模式来弥补这一缺陷。

在开发人员的圈子中,大家通过相互交流在开发过程中所遇到的问题以及解决方法来丰富整个圈子的经验。而设计模式就是在这样的情况下产生的。一个设计模式必然是针对某个特定的问题的,这个问题的解决方案以及这样解决问题产生的后果。在本文中我将讨论复合模式的特点和它的应用。

复合模式(Composite Patten)介绍


在介绍复合模式前,我们需要定义一下什么是复合对象(Composite Object)。复合对象是包含了其它对象的对象。例如,一幅图由一些基本的对象组成,例如线、圆、矩形和文本等,因此图就是复合对象。因为在Java中,开发人员操作基本对象的方式和操作复合对象的方式常常相同,因此需要利用到复合模式。例如,线或文本等基本图形对象都需要支持绘制、移动或缩放等功能;而图这种复合对象也需要支持相同的功能。在理想的情况下,我们希望对复合对象和基本对象以完全相同的方式完成这些操作,否则实现的代码将会产生不必要的复杂性,并且不易于维护和扩展。

那么什么是复合模式呢?将对象组织到树结构中以表达部分整体的层次关系就实现了复合模式,它使程序能够以相同的方式对待基本对象和复合对象。

在程序中实现复合模式并不难。复合类继承一个代表基本类型的基类就可以了。图1显示了一个表现复合模式思想的类图。



图1 复合模式的实现


在图1中,Component是代表基本类型的基类(也可以是一个接口);Composite是复合类。例如Component代表的是基本图形元素的基类,而Composite代表的是图;Operation1()和Operation2()方法分别是移动和缩放操作。图1中的Leaf类代表的是点、线或者圆等基本图形元素。

针对Component类中的每个方法,Composite类都有相同名称的方法与之对应。Composite类保存了一个基本对象的集合。通常Composite类中的方法在实现时都会将集合中的对象遍历一次,然后调用每个对象中相应的方法。例如图对象Drawing的draw()方法可能是这样实现的:


// 代码1一个复合方法
public void draw() {
   // I遍历所有的对象
   for(int i=0; i < getComponentCount(); ++i) {
      // 获得对对象的应用,调用它的draw方法
      Component component = getComponent(i);
      component.draw();   
   }
}


由于Composite类继承了Component类,因此你可以将一个Composite对象传递给需要Component对象作为参数的方法。例如:


// 代码2  repaint方法
public void repaint(Component component) {
   // 事实上component可能是一个复合对象,因此该方法没有区分基本对象和复合对象
   component.draw();
}


上面的repaint()方法中,Component对象被作为参数传递到了函数体,这个对象可以是Component,也可以是Composite。然后函数体中调用draw()方法。由于Composte类继承了Component,程序就不用区分传入的参数到底是哪种类的实例,只需要调用该对象的draw()方法就可以了。

图1中的类图展示了复合模式的一个方面:开发人员必须在引用一个Component对象时必须区分它到底了一个Component对象还是一个Composite对象。通常开发人员可以在Component类中加入一个方法,例如isComposite(),来辨别Composite类。如果该方法返回的是True,开发人员就需要将Component对象强制转换为Compoiste对象。


// 代码3,区分Component和Composite
...
if(component.isComposite()) {
   Composite composite = (Composite)component;
   composite.addComponent(AComponent);
}
...


图2显示了另一种实现复合模式的方法:



图2 另一种复合模式的实现方法


在图2所示的复合模型中,开发人员不必区分Component对象和Composite对象,也不需要将Component对象强制转换Composited对象。这样代码3中的代码就变成了一行:


// 代码4,不区分Component和Composite
...
component.addComponent(AComponent);
...


但是如果代码4中的component不是Composite的实例,addComponent()方法会做些什么呢?这是图2中的复合模式中最重要的一部分。显然一个基本类型不可能包含其他基本类型或复合类型,Component.addComponent()可能什么也不干,或者抛出一个异常。通常我们认为将基本类型加入其他基本类型的操作是一个错误,因此抛出异常是开发人员最好的选择。

那么这两种复合模式的实现方法哪一个更好呢?这是一个常常引起争论的问题。我个人觉得第二种方法更好一些,因为开发人员不必区分Component对象和Composite对象,也不用强制转换对象。

使用复合模式的实际例子:Struct Tiles

下面让我们来看一个复合模式应用用到Apache Struts JSP框架中的例子。在Apache Struts的框架中包含了一个被称为Tiles的JSP标签库,它是你能够将多个JSP组合成一个Web页面。事实上,它实现J2EE复合视图模式。在我们讨论复合模式和Tiles标签库的联系前,让我们先来看一个Tiles的例子。如果你对Struts已经非常熟悉了,你可以跳到"在Struts Tiles中使用复合模式"一节。

通常一张网页是有几个区域构成的。例如图3中的网页包含了边栏、头、内容和角注四个部分。这四个部分在网页上的分布构成了布局。Struts Tiles使你能够重用单独的每个区域和布局。在我们讨论重用的问题之前,让我们来看看怎样用不同的方法实现图3中的网页。



图3 例子网页


1.手工实现布局

下面是相应的HTML代码:


代码5 手工实现布局的HTML代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<%@ page contentType='text/html; charset=UTF-8' %>
<html>
   <head>
      <title>Implementing Complex Layouts by Hand</title>
   </head>
   <body background='graphics/blueAndWhiteBackground.gif'>
      <%-- One table lays out all of the content for this page --%>
      <table width='100%' height='100%'>
         <tr>
            <%-- Sidebar--%>
            <td width='150' valign='top' align='left'>
               <table>
                  <tr>
                     <%-- Sidebar top --%>
                     <td width='150' height='65' valign='top' align='left'>
                        <a href=''>
                           <img src='graphics/flags/britain_flag.gif'/></a>
                        <a href=''>
                           <img src='graphics/flags/german_flag.gif'/></a>
                        <a href=''>
                           <img src='graphics/flags/chinese_flag.gif'/></a>
                     </td>
                  </tr>
                  <tr>
                     <%-- Sidebar bottom --%>
                     <td>
                        <font size='5'>Links</font><p>
                        <a href=''>Home</a><br>
                        <a href=''>Products</a><br>
                        <a href=''>Downloads</a><br>
                        <a href=''>White papers</a><br>
                        <a href=''>Contact us</a><br>
                     </td>
                  </tr>
               </table>
            </td>
            <%-- Main content--%>
            <td valign='top' height='100%' width='*'>
               <table width='100%' height='100%'>
                  <tr>
                     <%-- Header--%>
                     <td valign='top' height='15%'>
                        <font size='6'>Welcome to Sabreware, Inc.</font>
                        <hr>
                     </td>
                  <tr>
                 <tr>
                     <%-- Content--%>
                     <td valign='top' height='*'>
                        <font size='4'>Page-specific content goes here</font>
                     </td>
                  </tr>
                  <tr>
                     <%-- Footer--%>
                     <td valign='bottom' height='15%'>
                        <hr>
                        Thanks for stopping by!
                     </td>
                  </tr>
               </table>
            </td>
         </tr>
      </table>
   </body>
</html>


然后你需要实现JSP。根据代码5编写出的JSP代码有两个缺点。第一,页面的内容被嵌入了JSP代码中,因此开发人员无法重用它。而事实上,边栏、头和角注在一个网站的网页中可能会被多次重用。第二,页面的布局也被嵌入到JSP代码中,因此即使有很多网也采用同样的布局,开发人员也无法重用它。通过使用 可以避免第一个问题。

2.使用 <jsp:include> 实现布局

在下面的例子中,我们使用 <jsp:include> 来实现图3中的网页。


代码6 用jsp:include实现布局
<%@ page contentType='text/html; charset=UTF-8' %>
<html>
   <head>
      <title>Implementing Complex Layouts by Hand</title>
   </head>
   <body background='graphics/blueAndWhiteBackground.gif'>
      <%-- One table lays out all of the content for this page --%>
      <table width='100%' height='100%'>
         <tr>
            <%-- Sidebar section --%>
            <td width='150' valign='top' align='left'>
               <jsp:include page='sidebar.jsp'/>
            </td>
            <%-- Main content section --%>
            <td height='100%' width='*'>
               <table width='100%' height='100%'>
                  <tr>
                     <%-- Header section --%>
                     <td valign='top' height='15%'>
                        <jsp:include page='header.jsp'/>
                     </td>
                  <tr>
                  <tr>
                     <%-- Content section --%>
                     <td valign='top' height='*'>
                        <jsp:include page='content.jsp'/>
                     </td>
                  </tr>
                  <tr>
                     <%-- Footer section --%>
                     <td valign='bottom' height='15%'>
                        <jsp:include page='footer.jsp'/>
                     </td>
                  </tr>
               </table>
            </td>
         </tr>
      </table>
   </body>
</html>


在上面的代码中,通过使用 <jsp:include> 来调用其它JSP。由于在sidebar.jsp、header.jsp、content.jsp、和footer.jsp中封装了边栏、头、内容和角注,因此开发人员可以重用这些元素。但是这种解决方案仍然无法重用网页的布局。下面是sidebar.jsp、header.jsp、content.jsp、和footer.jsp的代码:


代码7 sidebar.jsp
<%@ page contentType='text/html; charset=UTF-8' %>
<table width='100%'>
   <tr>
      <%-- Sidebar top component --%>
      <td width='150' height='65' valign='top' align='left'>
        <a href=''><img src='graphics/flags/britain_flag.gif'/></a>
        <a href=''><img src='graphics/flags/german_flag.gif'/></a>
        <a href=''><img src='graphics/flags/chinese_flag.gif'/></a>
      </td>
   </tr>
   <tr>
      <%-- Sidebar bottom component --%>
      <td>
         <table>
            <tr>
               <td>
                  <font size='5'>Links</font><p>
                  <a href=''>Home</a><br>
                  <a href=''>Products</a><br>
                  <a href=''>Downloads</a><br>
                  <a href=''>White papers</a><br>
                  <a href=''>Contact us</a><br>
               </td>
            </tr>
         </table>
      </td>
   </tr>
</table>



代码8 header.jsp
<font size='6'>Welcome to Sabreware, Inc.</font>
<hr>
代码9 content.jsp
<font size='4'>Page-specific content goes here</font>
代码10 footer.jsp
<hr>
Thanks for stopping by!


3.利用Structs Tiles来实现布局

代码10中展示了如何用Struts Tiles来实现前面提到的网页。这段代码利用了 <titles:insert> 标签来创建图3中对应的JSP网页。该JSP文件被定义在名称为sidebar-header-footer-definition的Tiles定义中,定义信息保存在Tiles的配置文件中,在这个例子中,配置文件是WEB-INF/tlds/struts-tiles.tld。代码11列出了该文件。


代码10 使用Struts Tiles来封装布局信息
<%@ page contentType='text/html; charset=UTF-8' %>
<%@ taglib uri='WEB-INF/tlds/struts-tiles.tld' prefix='tiles' %>
<tiles:insert definition='sidebar-header-footer-definition'/>
代码11 struts-tiles.tld
<!DOCTYPE tiles-definitions PUBLIC
  "-//Apache Software Foundation//DTD Tiles Configuration//EN"
  "http://jakarta.apache.org/struts/dtds/tiles-config.dtd">
<tiles-definitions>
   <definition  name='sidebar-header-footer-definition' 
                path='header-footer-sidebar-layout.jsp'>
      <put name='sidebar' value='sidebar.jsp'/>
      <put name='header'  value='header.jsp'/>   
      <put name='content' value='content.jsp'/>   
      <put name='footer'  value='footer.jsp'/>   
   </definition>
</tiles-definitions>


在struts-tiles.tld中可以看到,网页的布局被封装在header-footer-sidebar-layout.jsp中,而网页的内容被封装在sidebar.jsp, header.jsp, content.jsp和footer.jsp中(参见代码7到代码10)。代码12列出了封装了网页布局的JSP。


代码12 header-footer-sidebar-layout.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<%@ page contentType='text/html; charset=UTF-8' %>
<html>
   <head>
      <title>Struts Tiles implements the Composite pattern</title>
   </head>
   <body background='graphics/blueAndWhiteBackground.gif'>
      <%@ taglib uri='/WEB-INF/tlds/struts-tiles.tld' 
              prefix='tiles'%>
      <%-- One table lays out all of the content --%>
      <table width='100%' height='100%'>
         <%-- Sidebar section --%>
         <tr>
            <td width='150' valign='top' align='left'>
               <tiles:insert attribute='sidebar'/>
            </td>
            <%-- Main content section --%>
            <td valign='top' height='100%' width='*'>
               <table width='100%' height='100%'>
                  <tr>
                     <%-- Header section --%>
                     <td height='15%'>
                        <tiles:insert attribute='header'/>
                     </td>
                  <tr>
                  <tr>
                     <%-- Content section --%>
                     <td valign='top' height='*'>
                        <tiles:insert attribute='content'/>
                     </td>
                  </tr>
                  <tr>
                     <%-- Footer section --%>
                     <td valign='bottom' height='15%'>
                        <tiles:insert attribute='footer'/>
                     </td>
                  </tr>
               </table>
            </td>
         </tr>
      </table>
   </body>
</html>


如果你希望改变网页的内容,你可以定义另外一个Tile(如代码13、14),更改其中与内容相关的部分,但是保留网页原有的布局,这样重用布局和重用内容的问题都解决了。


代码13 另一个Tile的定义
<tiles-definitions>
   <definition  name='a-different-sidebar-header-footer-definition' 
                path='header-footer-sidebar-layout.jsp'>
      <put name='sidebar' value='sidebar.jsp'/>
      <put name='header'  value='header.jsp'/>   
      <put name='content' value='someOtherContent.jsp'/>   
      <put name='footer'  value='footer.jsp'/>   
   </definition>
</tiles-definitions>


然后在 <tiles:insert> 标签中使用新定义的Tile,如代码14所示


代码14 使用新定义的Tiles
<%@ page contentType='text/html; charset=UTF-8' %>
<%@ taglib uri='WEB-INF/tlds/struts-tiles.tld' prefix='tiles' %>
<tiles:insert definition='a-different-sidebar-header-footer-definition'/>


在Struts Tiles中使用复合模式


Struct Tiles实现了复合模式,在Struct Tiles中,JSP就是图1和图2中提到的Component类,而Tiles的定义代表了Composite类。这使开发人员能够指定一个JSP文件或一个Tiles定义作为JSP页面上某个区域中的内容。代码15展示了这个功能:


代码15在Struts Tiles中使用复合模式
<!DOCTYPE tiles-definitions PUBLIC
  "-//Apache Software Foundation//DTD Tiles Configuration//EN"
  "http://jakarta.apache.org/struts/dtds/tiles-config.dtd">
<tiles-definitions>
   <definition  name='sidebar-definition' 
                path='sidebar-layout.jsp'>
      <put name='top'    value='flags.jsp'/>
      <put name='bottom' value='sidebar-links.jsp'/>
   </definition>
   <definition  name='sidebar-header-footer-definition' 
                path='header-footer-sidebar-layout.jsp'>
      <put name='sidebar' value='sidebar-definition'
           type='definition'/>
      <put name='header'  value='header.jsp'/>
      <put name='content' value='content.jsp'/>
      <put name='footer'  value='footer.jsp'/>
   </definition>
</tiles-definitions>


在上面的代码中定义了两个Tile:sidebar-definition和sidebar-header-footer-definition。sidebar-definition被指定为sidebar-header-footer-definition中Value属性的值。这是一个很典型的复合模式的应用。在前面的一些例子中,Value属性的值通常是一个JSP文件,而在这里,Value属性的值是另一个Tile的定义。

小结


复合模式在与界面相关的设计中被经常使用到,最明显的例子就是Swing和Struts。由于它能够使你以同样的方式对待部件和包含部件的容器,因此在某些情况下可以大大提高代码的可重用度,提高开发的效率

posted @ 2006-03-31 13:54 高山流水 阅读(263) | 评论 (0)编辑 收藏

 
如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一个用来搜索匹配字符串的模式。
许多语言,包括Perl、PHP、Python、JavaScript和JScript,都支持用正则表达式处理文本,一些文本编辑器用正则表达式实现高级“搜索-替换”功能。那么Java又怎样呢?本文写作时,一个包含了用正则表达式进行文本处理的Java规范需求(Specification Request)已经得到认可,你可以期待在JDK的下一版本中看到它。
然而,如果现在就需要使用正则表达式,又该怎么办呢?你可以从Apache.org下载源代码开放的Jakarta-ORO库。本文接下来的内容先简要地介绍正则表达式的入门知识,然后以Jakarta-ORO API为例介绍如何使用正则表达式。
一、正则表达式基础知识
我们先从简单的开始。假设你要搜索一个包含字符“cat”的字符串,搜索用的正则表达式就是“cat”。如果搜索对大小写不敏感,单词“catalog”、“Catherine”、“sophisticated”都可以匹配。也就是说:
1.1 句点符号
假设你在玩英文拼字游戏,想要找出三个字母的单词,而且这些单词必须以“t”字母开头,以“n”字母结束。另外,假设有一本英文字典,你可以用正则表达式搜索它的全部内容。要构造出这个正则表达式,你可以使用一个通配符——句点符号“.”。这样,完整的表达式就是“t.n”,它匹配“tan”、“ten”、“tin”和“ton”,还匹配“t#n”、“tpn”甚至“t n”,还有其他许多无意义的组合。这是因为句点符号匹配所有字符,包括空格、Tab字符甚至换行符:
1.2 方括号符号
为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号(“[]”)里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配。也就是说,正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配,因为在方括号之内你只能匹配单个字符:
1.3 “或”符号
如果除了上面匹配的所有单词之外,你还想要匹配“toon”,那么,你可以使用“|”操作符。“|”操作符的基本意义就是“或”运算。要匹配“toon”,使用“t(a|e|i|o|oo)n”正则表达式。这里不能使用方扩号,因为方括号只允许匹配单个字符;这里必须使用圆括号“()”。圆括号还可以用来分组,具体请参见后面介绍。
1.4 表示匹配次数的符号
表一显示了表示匹配次数的符号,这些符号用来确定紧靠该符号左边的符号出现的次数:

假设我们要在文本文件中搜索美国的社会安全号码。这个号码的格式是999-99-9999。用来匹配它的正则表达式如图一所示。在正则表达式中,连字符(“-”)有着特殊的意义,它表示一个范围,比如从0到9。因此,匹配社会安全号码中的连字符号时,它的前面要加上一个转义字符“\”。

图一:匹配所有123-12-1234形式的社会安全号码

假设进行搜索的时候,你希望连字符号可以出现,也可以不出现——即,999-99-9999和999999999都属于正确的格式。这时,你可以在连字符号后面加上“?”数量限定符号,如图二所示:

图二:匹配所有123-12-1234和123121234形式的社会安全号码

下面我们再来看另外一个例子。美国汽车牌照的一种格式是四个数字加上二个字母。它的正则表达式前面是数字部分“[0-9]{4}”,再加上字母部分“[A-Z]{2}”。图三显示了完整的正则表达式。

图三:匹配典型的美国汽车牌照号码,如8836KV

1.5 “否”符号
“^”符号称为“否”符号。如果用在方括号内,“^”表示不想要匹配的字符。例如,图四的正则表达式匹配所有单词,但以“X”字母开头的单词除外。

图四:匹配所有单词,但“X”开头的除外

1.6 圆括号和空白符号
假设要从格式为“June 26, 1951”的生日日期中提取出月份部分,用来匹配该日期的正则表达式可以如图五所示:

图五:匹配所有Moth DD,YYYY格式的日期

新出现的“\s”符号是空白符号,匹配所有的空白字符,包括Tab字符。如果字符串正确匹配,接下来如何提取出月份部分呢?只需在月份周围加上一个圆括号创建一个组,然后用ORO API(本文后面详细讨论)提取出它的值。修改后的正则表达式如图六所示:

图六:匹配所有Month DD,YYYY格式的日期,定义月份值为第一个组

1.7 其它符号
为简便起见,你可以使用一些为常见正则表达式创建的快捷符号。如表二所示:
表二:常用符号

例如,在前面社会安全号码的例子中,所有出现“[0-9]”的地方我们都可以使用“\d”。修改后的正则表达式如图七所示:

图七:匹配所有123-12-1234格式的社会安全号码

二、Jakarta-ORO库
有许多源代码开放的正则表达式库可供Java程序员使用,而且它们中的许多支持Perl 5兼容的正则表达式语法。我在这里选用的是Jakarta-ORO正则表达式库,它是最全面的正则表达式API之一,而且它与Perl 5正则表达式完全兼容。另外,它也是优化得最好的API之一。
Jakarta-ORO库以前叫做OROMatcher,Daniel Savarese大方地把它赠送给了Jakarta Project。你可以按照本文最后参考资源的说明下载它。
我首先将简要介绍使用Jakarta-ORO库时你必须创建和访问的对象,然后介绍如何使用Jakarta-ORO API。
▲ PatternCompiler对象
首先,创建一个Perl5Compiler类的实例,并把它赋值给PatternCompiler接口对象。Perl5Compiler是PatternCompiler接口的一个实现,允许你把正则表达式编译成用来匹配的Pattern对象。
▲ Pattern对象
要把正则表达式编译成Pattern对象,调用compiler对象的compile()方法,并在调用参数中指定正则表达式。例如,你可以按照下面这种方式编译正则表达式“t[aeio]n”:
默认情况下,编译器创建一个大小写敏感的模式(pattern)。因此,上面代码编译得到的模式只匹配“tin”、“tan”、 “ten”和“ton”,但不匹配“Tin”和“taN”。要创建一个大小写不敏感的模式,你应该在调用编译器的时候指定一个额外的参数:
创建好Pattern对象之后,你就可以通过PatternMatcher类用该Pattern对象进行模式匹配。
▲ PatternMatcher对象
PatternMatcher对象根据Pattern对象和字符串进行匹配检查。你要实例化一个Perl5Matcher类并把结果赋值给PatternMatcher接口。Perl5Matcher类是PatternMatcher接口的一个实现,它根据Perl 5正则表达式语法进行模式匹配:
使用PatternMatcher对象,你可以用多个方法进行匹配操作,这些方法的第一个参数都是需要根据正则表达式进行匹配的字符串:
· boolean matches(String input, Pattern pattern):当输入字符串和正则表达式要精确匹配时使用。换句话说,正则表达式必须完整地描述输入字符串。
· boolean matchesPrefix(String input, Pattern pattern):当正则表达式匹配输入字符串起始部分时使用。
· boolean contains(String input, Pattern pattern):当正则表达式要匹配输入字符串的一部分时使用(即,它必须是一个子串)。
另外,在上面三个方法调用中,你还可以用PatternMatcherInput对象作为参数替代String对象;这时,你可以从字符串中最后一次匹配的位置开始继续进行匹配。当字符串可能有多个子串匹配给定的正则表达式时,用PatternMatcherInput对象作为参数就很有用了。用PatternMatcherInput对象作为参数替代String时,上述三个方法的语法如下:
· boolean matches(PatternMatcherInput input, Pattern pattern)
· boolean matchesPrefix(PatternMatcherInput input, Pattern pattern)
· boolean contains(PatternMatcherInput input, Pattern pattern)
三、应用实例
下面我们来看看Jakarta-ORO库的一些应用实例。
3.1 日志文件处理
任务:分析一个Web服务器日志文件,确定每一个用户花在网站上的时间。在典型的BEA WebLogic日志文件中,日志记录的格式如下:
分析这个日志记录,可以发现,要从这个日志文件提取的内容有两项:IP地址和页面访问时间。你可以用分组符号(圆括号)从日志记录提取出IP地址和时间标记。
首先我们来看看IP地址。IP地址有4个字节构成,每一个字节的值在0到255之间,各个字节通过一个句点分隔。因此,IP地址中的每一个字节有至少一个、最多三个数字。图八显示了为IP地址编写的正则表达式:

图八:匹配IP地址

IP地址中的句点字符必须进行转义处理(前面加上“\”),因为IP地址中的句点具有它本来的含义,而不是采用正则表达式语法中的特殊含义。句点在正则表达式中的特殊含义本文前面已经介绍。
日志记录的时间部分由一对方括号包围。你可以按照如下思路提取出方括号里面的所有内容:首先搜索起始方括号字符(“[”),提取出所有不超过结束方括号字符(“]”)的内容,向前寻找直至找到结束方括号字符。图九显示了这部分的正则表达式。

图九:匹配至少一个字符,直至找到“]”

现在,把上述两个正则表达式加上分组符号(圆括号)后合并成单个表达式,这样就可以从日志记录提取出IP地址和时间。注意,为了匹配“- -”(但不提取它),正则表达式中间加入了“\s-\s-\s”。完整的正则表达式如图十所示。

图十:匹配IP地址和时间标记

现在正则表达式已经编写完毕,接下来可以编写使用正则表达式库的Java代码了。
为使用Jakarta-ORO库,首先创建正则表达式字符串和待分析的日志记录字符串:
这里使用的正则表达式与图十的正则表达式差不多完全相同,但有一点例外:在Java中,你必须对每一个向前的斜杠(“\”)进行转义处理。图十不是Java的表示形式,所以我们要在每个“\”前面加上一个“\”以免出现编译错误。遗憾的是,转义处理过程很容易出现错误,所以应该小心谨慎。你可以首先输入未经转义处理的正则表达式,然后从左到右依次把每一个“\”替换成“\\”。如果要复检,你可以试着把它输出到屏幕上。
初始化字符串之后,实例化PatternCompiler对象,用PatternCompiler编译正则表达式创建一个Pattern对象:
现在,创建PatternMatcher对象,调用PatternMatcher接口的contain()方法检查匹配情况:
接下来,利用PatternMatcher接口返回的MatchResult对象,输出匹配的组。由于logEntry字符串包含匹配的内容,你可以看到类如下面的输出:
3.2 HTML处理实例一
下面一个任务是分析HTML页面内FONT标记的所有属性。HTML页面内典型的FONT标记如下所示:
程序将按照如下形式,输出每一个FONT标记的属性:
在这种情况下,我建议你使用两个正则表达式。第一个如图十一所示,它从字体标记提取出“"face="Arial, Serif" size="+2" color="red"”。

图十一:匹配FONT标记的所有属性

第二个正则表达式如图十二所示,它把各个属性分割成名字-值对。

图十二:匹配单个属性,并把它分割成名字-值对

分割结果为:
现在我们来看看完成这个任务的Java代码。首先创建两个正则表达式字符串,用Perl5Compiler把它们编译成Pattern对象。编译正则表达式的时候,指定Perl5Compiler.CASE_INSENSITIVE_MASK选项,使得匹配操作不区分大小写。
接下来,创建一个执行匹配操作的Perl5Matcher对象。
假设有一个String类型的变量html,它代表了HTML文件中的一行内容。如果html字符串包含FONT标记,匹配器将返回true。此时,你可以用匹配器对象返回的MatchResult对象获得第一个组,它包含了FONT的所有属性:
接下来创建一个PatternMatcherInput对象。这个对象允许你从最后一次匹配的位置开始继续进行匹配操作,因此,它很适合于提取FONT标记内属性的名字-值对。创建PatternMatcherInput对象,以参数形式传入待匹配的字符串。然后,用匹配器实例提取出每一个FONT的属性。这通过指定PatternMatcherInput对象(而不是字符串对象)为参数,反复地调用PatternMatcher对象的contains()方法完成。PatternMatcherInput对象之中的每一次迭代将把它内部的指针向前移动,下一次检测将从前一次匹配位置的后面开始。
本例的输出结果如下:
3.3 HTML处理实例二
下面我们来看看另一个处理HTML的例子。这一次,我们假定Web服务器从widgets.acme.com移到了newserver.acme.com。现在你要修改一些页面中的链接:
执行这个搜索的正则表达式如图十三所示:

图十三:匹配修改前的链接

如果能够匹配这个正则表达式,你可以用下面的内容替换图十三的链接:
注意#字符的后面加上了$1。Perl正则表达式语法用$1、$2等表示已经匹配且提取出来的组。图十三的表达式把所有作为一个组匹配和提取出来的内容附加到链接的后面。
现在,返回Java。就象前面我们所做的那样,你必须创建测试字符串,创建把正则表达式编译到Pattern对象所必需的对象,以及创建一个PatternMatcher对象:
接下来,用com.oroinc.text.regex包Util类的substitute()静态方法进行替换,输出结果字符串:
Util.substitute()方法的语法如下:
这个调用的前两个参数是以前创建的PatternMatcher和Pattern对象。第三个参数是一个Substiution对象,它决定了替换操作如何进行。本例使用的是Perl5Substitution对象,它能够进行Perl5风格的替换。第四个参数是想要进行替换操作的字符串,最后一个参数允许指定是否替换模式的所有匹配子串(Util.SUBSTITUTE_ALL),或只替换指定的次数。
【结束语】在这篇文章中,我为你介绍了正则表达式的强大功能。只要正确运用,正则表达式能够在字符串提取和文本修改中起到很大的作用。另外,我还介绍了如何在Java程序中通过Jakarta-ORO库利用正则表达式。至于最终采用老式的字符串处理方式(使用StringTokenizer,charAt,和substring),还是采用正则表达式,这就有待你自己决定了。

posted @ 2006-03-31 13:53 高山流水 阅读(150) | 评论 (0)编辑 收藏

     摘要: Windows 服务端口大全 ...  阅读全文

posted @ 2006-03-31 13:52 高山流水 阅读(616) | 评论 (0)编辑 收藏

正则表达式用于字符串处理,表单验证等场合,实用高效,但用到时总是不太把握,以致往往要上网查一番。我将一些常用的表达式收藏在这里,作备忘之用。本贴随时会更新。

匹配中文字符的正则表达式: [\u4e00-\u9fa5]

匹配双字节字符(包括汉字在内):[^\x00-\xff]

应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}

匹配空行的正则表达式:\n[\s| ]*\r

匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/

匹配首尾空格的正则表达式:(^\s*)|(\s*$)

应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:

String.prototype.trim = function()
{
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

利用正则表达式分解和转换IP地址:

下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:

function IP2V(ip)
{
 re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g  //匹配IP地址的正则表达式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
 throw new Error("Not a valid IP address!")
}
}

不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:

var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

利用正则表达式去除字串中重复的字符的算法程序:[注:此程序不正确,原因见本贴回复]

var s="abacabefgeeii"
var s1=s.replace(/(.).*\1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2)  //结果为:abcefgi

我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法,最终没有找到,这是我能想到的最简单的实现方法。思路是使用后向引用取出包括重复的字符,再以重复的字符建立第二个表达式,取到不重复的字符,两者串连。这个方法对于字符顺序有要求的字符串可能不适用。

得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1

s="http://www.9499.net/page1.htm"
s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
alert(s)

利用正则表达式限制网页表单里的文本框输入内容:

用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"

用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"

用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"

用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"

正则表达式,相关链接
http://blog.csdn.net/laily/category/19548.aspx
http://blog.csdn.net/laily/archive/2004/06/30/30525.aspx 微软的正则表达式教程(五):选择/编组和后向引用

http://blog.csdn.net/laily/archive/2004/06/30/30522.aspx 微软的正则表达式教程(四):限定符和定位符

http://blog.csdn.net/laily/archive/2004/06/30/30517.aspx 微软的正则表达式教程(三):字符匹配

http://blog.csdn.net/laily/archive/2004/06/30/30514.aspx 微软的正则表达式教程(二):正则表达式语法和优先权顺序

http://blog.csdn.net/laily/archive/2004/06/30/30511.aspx 微软的正则表达式教程(一):正则表达式简介

http://blog.csdn.net/laily/archive/2004/06/30/30360.aspx 小程序大作为:高级查找/替换、正则表达式练习器、Javascript脚本程序调试器

http://blog.csdn.net/laily/archive/2004/06/24/25872.aspx 经典正则表达式

正则表达式,正规表达式,正则表达式匹配,正则表达式语法,模式匹配,正规表达式匹配 javascript正则表达式 ASP正则表达式 ASP.NET正则表达式 C#正则表达式 JSP正则表达式 PHP正则表达式 VB.NET正则表达式 VBSCript正则表达式编程 delphi正则表达式 jscript

补充:
^\d+$  //匹配非负整数(正整数 + 0)
^[0-9]*[1-9][0-9]*$  //匹配正整数
^((-\d+)|(0+))$  //匹配非正整数(负整数 + 0)
^-[0-9]*[1-9][0-9]*$  //匹配负整数
^-?\d+$    //匹配整数
^\d+(\.\d+)?$  //匹配非负浮点数(正浮点数 + 0)
^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$  //匹配正浮点数
^((-\d+(\.\d+)?)|(0+(\.0+)?))$  //匹配非正浮点数(负浮点数 + 0)
^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$  //匹配负浮点数
^(-?\d+)(\.\d+)?$  //匹配浮点数
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串
^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$    //匹配email地址
^[a-zA-z]+://匹配(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$  //匹配url

利用正则表达式去除字串中重复的字符的算法程序:

var s="abacabefgeeii"
var s1=s.replace(/(.).*\1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) //结果为:abcefgi
===============================
如果var s = "abacabefggeeii"
结果就不对了,结果为:abeicfgg
正则表达式的能力有限

1.确认有效电子邮件格式
下面的代码示例使用静态 Regex.IsMatch 方法验证一个字符串是否为有效电子邮件格式。如果字符串包含一个有效的电子邮件地址,则 IsValidEmail 方法返回 true,否则返回 false,但不采取其他任何操作。您可以使用 IsValidEmail,在应用程序将地址存储在数据库中或显示在 ASP.NET 页中之前,筛选出包含无效字符的电子邮件地址。

[Visual Basic]
Function IsValidEmail(strIn As String) As Boolean
' Return true if strIn is in valid e-mail format.
Return Regex.IsMatch(strIn, ("^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$")
End Function
[C#]
bool IsValidEmail(string strIn)
{
// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
}


2.清理输入字符串
下面的代码示例使用静态 Regex.Replace 方法从字符串中抽出无效字符。您可以使用这里定义的 CleanInput 方法,清除掉在接受用户输入的窗体的文本字段中输入的可能有害的字符。CleanInput 在清除掉除 @、-(连字符)和 .(句点)以外的所有非字母数字字符后返回一个字符串。

[Visual Basic]
Function CleanInput(strIn As String) As String
' Replace invalid characters with empty strings.
Return Regex.Replace(strIn, "[^\w\.@-]", "")
End Function
[C#]
String CleanInput(string strIn)
{
// Replace invalid characters with empty strings.
return Regex.Replace(strIn, @"[^\w\.@-]", "");
}


3.更改日期格式
以下代码示例使用 Regex.Replace 方法来用 dd-mm-yy 的日期形式代替 mm/dd/yy 的日期形式。

[Visual Basic]
Function MDYToDMY(input As String) As String
Return Regex.Replace(input, _
"\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b", _
"${day}-${month}-${year}")
End Function
[C#]
String MDYToDMY(String input)
{
return Regex.Replace(input,
"\\b(?<month>\\d{1,2})/(?<day>\\d{1,2})/(?<year>\\d{2,4})\\b",
"${day}-${month}-${year}");
}
Regex 替换模式
本示例说明如何在 Regex.Replace 的替换模式中使用命名的反向引用。其中,替换表达式 ${day} 插入由 (?<day>...) 组捕获的子字符串。

有几种静态函数使您可以在使用正则表达式操作时无需创建显式正则表达式对象,而 Regex.Replace 函数正是其中之一。如果您不想保留编译的正则表达式,这将给您带来方便


4.提取 URL 信息
以下代码示例使用 Match.Result 来从 URL 提取协议和端口号。例如,“http://www.contoso.com:8080/letters/readme.html”将返回“http:8080”。

[Visual Basic]
Function Extension(url As String) As String
Dim r As New Regex("^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/", _
RegexOptions.Compiled)
Return r.Match(url).Result("${proto}${port}")
End Function
[C#]
String Extension(String url)
{
Regex r = new Regex(@"^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/",
RegexOptions.Compiled);
return r.Match(url).Result("${proto}${port}");
}

posted 2004-10-25 14:42:00.0

posted @ 2006-03-31 13:52 高山流水 阅读(423) | 评论 (2)编辑 收藏

 
  最近,为了能在数据库服务器中运行其他应用程序,在保持数据库操作系统版本不变的前提下对数据库服务器进行了软、硬件上的升级。在软件上,将操作系统从Windows 2000升级到Windows Server 2003;在硬件上,将服务器中的内存由原来的512MB增加到1GB(1024MB)。

  在升级后的开始几个星期之内,服务器在使用中表现良好。但是不久后就发现,在服务器上同时运行的其他应用程序却出现了异常,不时地报出内存分配不足的警告。经过几次跟踪后发现,原来是SQL Server吞去了大部分内存所致。被SQL Server占用的内存由升级前的不到400MB一下子增加到现在的900MB,并且有不断增长的趋势。

  通过查找原因才知道这是SQL Server 缓冲池的预期行为。默认情况下,在启动 SQL Server之后,SQL Server会根据操作系统报告的物理内存数来动态增大或缩小高速缓冲存储器的容量。只要可用物理内存大小保持在4MB到10MB之间,SQL Server 缓冲池就会继续增大(保留可用物理内存在4MB到10MB之间是为了避免操作系统因为缺少内存而频繁地换页)。如果物理可用内存变得较少的时候,则SQL Server会将一些内存释放给操作系统。

  为了使运行在服务器上的应用程序都能达到比较满意的效果,同时也为了能给其他应用程序分配足够的内存,需要采取措施限制SQL Server 的内存使用量。我们可以通过设置SQL Server 数据库引擎使用的内存的上下限来达到此目的。其具体步骤是:

  1.打开企业管理器,展开服务器组。

  2.单击该服务器,点击鼠标右键,单击属性菜单。

  3.在弹出的对话框中单击内存选项卡。

  内存设置方法有两种:

  1.设置min server memory和max server memory 在一个范围段内。

  比如,我们将它设置成最小0MB,最大255MB。这种方法在为一台服务器中运行多个应用程序分配内存时非常有用。

  2.设置 min server memory 和 max server memory 为同一数值。

  比如,可以将它最大和最小值都设置成255MB。这样的设置方法与窗口中的另一个选项“使用固定的内存大小” 相一致。

  虽然内存最小值和最大值设置是高级选项,但在设置完毕之后,最好还是先将SQL Server服务停止后再重新运行,以便SQL Server能更好地对内存进行合理安排。

posted @ 2006-03-31 13:50 高山流水 阅读(155) | 评论 (0)编辑 收藏

 1) 类名首字母应该大写。字段、方法以及对象(句柄)的首字母应小写。对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。例如: ThisIsAClassName thisIsMethodOrFieldName 若在定义中出现了常数初始化字符,则大写static final基本类型标识符中的所有字母。这样便可标志出它们属于编译期的常数。 Java包(Package)属于一种特殊情况:它们全都是小写字母,即便中间的单词亦是如此。对于域名扩展名称,如com,org,net或者edu等,全部都应小写(这也是Java 1.1和Java 1.2的区别之一)。

 (2) 为了常规用途而创建一个类时,请采取"经典形式",并包含对下述元素的定义: equals() hashCode() toString() clone()(implement Cloneable) implement Serializable
 (3) 对于自己创建的每一个类,都考虑置入一个main(),其中包含了用于测试那个类的代码。为使用一个项目中的类,我们没必要删除测试代码。若进行了任何形式的改动,可方便地返回测试。这些代码也可作为如何使用类的一个示例使用。
 (4) 应将方法设计成简要的、功能性单元,用它描述和实现一个不连续的类接口部分。理想情况下,方法应简明扼要。若长度很大,可考虑通过某种方式将其分割成较短的几个方法。这样做也便于类内代码的重复使用(有些时候,方法必须非常大,但它们仍应只做同样的一件事情)。
 (5) 设计一个类时,请设身处地为客户程序员考虑一下(类的使用方法应该是非常明确的)。然后,再设身处地为管理代码的人考虑一下(预计有可能进行哪些形式的修改,想想用什么方法可把它们变得更简单)。
(6) 使类尽可能短小精悍,而且只解决一个特定的问题。下面是对类设计的一些建议: ■一个复杂的开关语句:考虑采用"多形"机制 ■数量众多的方法涉及到类型差别极大的操作:考虑用几个类来分别实现 ■许多成员变量在特征上有很大的差别:考虑使用几个类
 (7) 让一切东西都尽可能地"私有"--private。可使库的某一部分"公共化"(一个方法、类或者一个字段等等),就永远不能把它拿出。若强行拿出,就可能破坏其他人现有的代码,使他们不得不重新编写和设计。若只公布自己必须公布的,就可放心大胆地改变其他任何东西。在多线程环境中,隐私是特别重要的一个因素--只有private字段才能在非同步使用的情况下受到保护。
 (8) 谨惕"巨大对象综合症"。对一些习惯于顺序编程思维、且初涉OOP领域的新手,往往喜欢先写一个顺序执行的程序,再把它嵌入一个或两个巨大的对象里。根据编程原理,对象表达的应该是应用程序的概念,而非应用程序本身。
 (9) 若不得已进行一些不太雅观的编程,至少应该把那些代码置于一个类的内部。
(10) 任何时候只要发现类与类之间结合得非常紧密,就需要考虑是否采用内部类,从而改善编码及维护工作(参见第14章14.1.2小节的"用内部类改进代码")。
 (11) 尽可能细致地加上注释,并用javadoc注释文档语法生成自己的程序文档。
 (12) 避免使用"魔术数字",这些数字很难与代码很好地配合。如以后需要修改它,无疑会成为一场噩梦,因为根本不知道"100"到底是指"数组大小"还是"其他全然不同的东西"。所以,我们应创建一个常数,并为其使用具有说服力的描述性名称,并在整个程序中都采用常数标识符。这样可使程序更易理解以及更易维护。
 (13) 涉及构建器和异常的时候,通常希望重新丢弃在构建器中捕获的任何异常--如果它造成了那个对象的创建失败。这样一来,调用者就不会以为那个对象已正确地创建,从而盲目地继续。
 (14) 当客户程序员用完对象以后,若你的类要求进行任何清除工作,可考虑将清除代码置于一个良好定义的方法里,采用类似于cleanup()这样的名字,明确表明自己的用途。除此以外,可在类内放置一个boolean(布尔)标记,指出对象是否已被清除。在类的finalize()方法里,请确定对象已被清除,并已丢弃了从RuntimeException继承的一个类(如果还没有的话),从而指出一个编程错误。在采取象这样的方案之前,请确定finalize()能够在自己的系统中工作(可能需要调用System.runFinalizersonExit(true),从而确保这一行为)。 (15) 在一个特定的作用域内,若一个对象必须清除(非由垃圾收集机制处理),请采用下述方法:初始化对象;若成功,则立即进入一个含有finally从句的try块,开始清除工作。
 (16) 若在初始化过程中需要覆盖(取消)finalize(),请记住调用super.finalize()(若Object属于我们的直接超类,则无此必要)。在对finalize()进行覆盖的过程中,对super.finalize()的调用应属于最后一个行动,而不应是第一个行动,这样可确保在需要基础类组件的时候它们依然有效。
 (17) 创建大小固定的对象集合时,请将它们传输至一个数组(若准备从一个方法里返回这个集合,更应如此操作)。这样一来,我们就可享受到数组在编译期进行类型检查的好处。此外,为使用它们,数组的接收者也许并不需要将对象"造型"到数组里。
 (18) 尽量使用interfaces,不要使用abstract类。若已知某样东西准备成为一个基础类,那么第一个选择应是将其变成一个interface(接口)。只有在不得不使用方法定义或者成员变量的时候,才需要将其变成一个abstract(抽象)类。接口主要描述了客户希望做什么事情,而一个类则致力于(或允许)具体的实施细节。
 (19) 在构建器内部,只进行那些将对象设为正确状态所需的工作。尽可能地避免调用其他方法,因为那些方法可能被其他人覆盖或取消,从而在构建过程中产生不可预知的结果(参见第7章的详细说明)。
 (20) 对象不应只是简单地容纳一些数据;它们的行为也应得到良好的定义。
 (21) 在现成类的基础上创建新类时,请首先选?quot;新建"或"创作"。只有自己的设计要求必须继承时,才应考虑这方面的问题。若在本来允许新建的场合使用了继承,则整个设计会变得没有必要地复杂。
(22) 用继承及方法覆盖来表示行为间的差异,而用字段表示状态间的区别。一个非常极端的例子是通过对不同类的继承来表示颜色,这是绝对应该避免的:应直接使用一个"颜色"字段。
 (23) 为避免编程时遇到麻烦,请保证在自己类路径指到的任何地方,每个名字都仅对应一个类。否则,编译器可能先找到同名的另一个类,并报告出错消息。若怀疑自己碰到了类路径问题,胧允栽诶嗦肪兜拿恳桓銎鸬悖阉饕幌峦?class文件。
 (24) 在Java 1.1 AWT中使用事件"适配器"时,特别容易碰到一个陷阱。若覆盖了某个适配器方法,同时拼写方法没有特别讲究,最后的结果就是新添加一个方法,而不是覆盖现成方法。然而,由于这样做是完全合法的,所以不会从编译器或运行期系统获得任何出错提示--只不过代码的工作就变得不正常了。
(25) 用合理的设计方案消除"伪功能"。也就是说,假若只需要创建类的一个对象,就不要提前限制自己使用应用程序,并加上一条"只生成其中一个"注释。请考虑将其封装成一个"独生子"的形式。若在主程序里有大量散乱的代码,用于创建自己的对象,请考虑采纳一种创造性的方案,将些代码封装起来。
 (26) 警惕"分析瘫痪"。请记住,无论如何都要提前了解整个项目的状况,再去考察其中的细节。由于把握了全局,可快速认识自己未知的一些因素,防止在考察细节的时候陷入"死逻辑"中。
 (27) 警惕"过早优化"。首先让它运行起来,再考虑变得更快--但只有在自己必须这样做、而且经证实在某部分代码中的确存在一个性能瓶颈的时候,才应进行优化。除非用专门的工具分析瓶颈,否则很有可能是在浪费自己的时间。性能提升的隐含代价是自己的代码变得难于理解,而且难于维护。
 (28) 请记住,阅读代码的时间比写代码的时间多得多。思路清晰的设计可获得易于理解的程序,但注释、细致的解释以及一些示例往往具有不可估量的价值。无论对你自己,还是对后来的人,它们都是相当重要的。如对此仍有怀疑,那么请试想自己试图从联机Java文档里找出有用信息时碰到的挫折,这样或许能将你说服。
 (29) 如认为自己已进行了良好的分析、设计或者实施,那么请稍微更换一下思维角度。试试邀请一些外来人士--并不一定是专家,但可以是来自本公司其他部门的人。请他们用完全新鲜的眼光考察你的工作,看看是否能找出你一度熟视无睹的问题。采取这种方式,往往能在最适合修改的阶段找出一些关键性的问题,避免产品发行后再解决问题而造成的金钱及精力方面的损失。
 (30) 良好的设计能带来最大的回报。简言之,对于一个特定的问题,通常会花较长的时间才能找到一种最恰当的解决方案。但一旦找到了正确的方法,以后的工作就轻松多了,再也不用经历数小时、数天或者数月的痛苦挣扎。我们的努力工作会带来最大的回报(甚至无可估量)。而且由于自己倾注了大量心血,最终获得一个出色的设计方案,成功的快感也是令人心动的。坚持抵制草草完工的诱惑--那样做往往得不偿失

posted @ 2006-03-31 13:50 高山流水 阅读(142) | 评论 (0)编辑 收藏

A ↑
ACCESS.CHM - Windows帮助文件
ACCSTAT.EXE - 辅助状态指示器
ADVAPI32.DLL - 高级Win32应用程序接口
AHA154X.MPD - SCSI驱动程序
AM1500T.VXT - 网卡驱动程序
AM2100.DOS - 网卡驱动程序
APPSTART.ANI - 动画光标
APPS.HLP - Windows帮助文件
AUDIOCDC.HLP - "易码编码解码器"帮助文件
AWARDPR32.EXE - 增加打印机工具
B ↑
BIGMEM.DRV - BIGMEM虚拟设备
BILLADD.DLL - 动态链接库(支持MSW)
BIOS.VXD - 即插即用BIOS接口
BUSLOGIC.MPD - SCSI驱动程序

C ↑
CALC.EXE - 计算器应用程序
CANNON800.DRV - 佳能打印机驱动程序
CHOICE.COM - MSDOS命令
CHS16.FON - 字体文件(16点阵中文)
CANYON.MID - MIDI文件例子
CARDDRV.EXE - PCMCIA支持程序
CDFS.VXD - CDROM文件系统
CDPLAYER.EXE - CD播放器应用程序
CDPLAYER.HLP - CD播放器帮助文件
CHIPS.DRV - 芯片技术显示驱动程序
CHKDSK.EXE - DOS磁盘检查工具
CHOOSUSR.DLL - 网络客户
CHOKD.WAV - 声音文件例子
CIS.SCP - 脚本文件(演示如何建立与Compuserve的PPP连接)
CLAIRE~1.RMI - MINI序列
CLIP.INF - 安装信息文件(剪粘板查看器)
CLOSEWIN.AVI - 影片剪辑(AVI)(如何关闭窗口)
CMC.DLL:Mail - API1.0公共信息调用
COMBUFF.VXD - COM端虚拟设备
COMCTL32.DLL - 32位Shell组件
COMDLG32.DLL - 32位公共对话库
COMIC.TIF - TrueType字体文件(Comic Sans Ms)
COMMAND.COM - 公共对话库
COMMDLG.DLL - 16位公共对话库
COMMON.HLP - OLE帮助文件
COMPOBJ.DLL - OLE16/32互操作库
CONAGEN.EXE - 32位控制支持
CONFAPI.DLL - Microsoft网络组件
CONFIG.SYS - 配置文件
CONFIG.TXT - 自述文件(配置文件中如何使用命令)
CONTROL.EXE - "控制面板"应用程序
COOL.DLL - 统一资源定位文件
COPY.INF - 安装信息文件
CP-1250.NLS - 自然语言支持文件
CPQNDIS.DOS - 网卡驱动程序
CPQNDIS3.VXD - Compaq以太控制器NDIS驱动程序
CR3240.EXE - DOS6.22中文版CR3240打印机驱动程序
CRTDLL.DLL - Microsoft C运行时间库
CSETUP.EXE - MSDOS6.22中文设置程序
CSETUP.WIN - CSetup.exe支持文件
CSMAPPER.SYS - 系统文件(支持PCMCIA)
CSPMAN.DLL - 动态链接库(SoundBlaster 16 Driver)
CTRLPAN.EXE - MSDOS命令(系统控制台程序)
CTRLPAN.EXE - MSDOS6.22中文版控制程序

D ↑
DBLBVFF.SYS - 双缓冲驱动程序
DC21X4.SYS - NDIS3驱动程序
DCIMAN.DLL - 显示控制接口
DCIMAN32.DLL - 显示控制接口
DDEML.DLL - DDE信息库
DEBMP.DLL - 光栅显示设备
DEBUG.EXE - Debug调试工具
DECPSMW4.INF - 安装信息文件(DEC打印机安装)
DECLAN.VXD - DECLAN网卡驱动程序
DEFRAG - 打开"选定驱动器"窗口
DEL.INF - 安装信息文件
DELTEMP.COM - 初始化帮助工具
DELTREE.EXE - 删除目录工具
DEMET.DLL - 向量显示工程
DESKCP16.DLL - 16位桌面控制面板
DESKTOP.MSN - Microsoft网络组件
DESS.DLL - 表格显示工程
DEWP.DLL - 字处理显示工程
DIALER.CNT - 对话帮助
DIALER.EXE - 电话拨号程序
DIALER.HLP - 电话拨号帮助文件
DIALMON.EXE - 拨号监视程序(IE2.0)
DIBENG.DLL - 独立设备的位同工程
DICONIX.DRX - 打印机驱动
DING.WAN - 声音文件例子
DIRECTCC.EXE - 直接线缆连接应用程序
DISKCOMP - 磁盘比较工具
DISKCOPY.COM - 磁盘拷贝工具
DISKDRV.INF - 安装信息
DISPLAY.TXT - 显示卡README文件
DMCOLOR.DLL - 通用打印驱动程序彩打支持库
DOSKEY.COM - DOS命令
DOSX.EXE - MSDOS配置程序
DRAGDROP.AVI - 影片剪辑(AVI)(如何使用拖拽)
DRIVER.SYS - DOS驱动程序
DRVSPACE.EXE - 磁盘压缩工具
DRVSPACE.HLP - 磁盘空间管理帮助文件

E ↑
EDIT.COM - DOS文字编辑程序
EDLIN.EXE - DOS行编辑器
EE16.VXD - 虚拟设备驱动程序
EISA.VXD - 即插即用EISA总线计数器
EK550C.ICM - 打印机简介
EMM386.EXE - 扩展内存管理程序
ENABLE.INF - 初始化信息
ENGCT.EXE - MSN支持文件
ESCP24SC.DRV - 设备驱动程序
EUDCEDIT.CNF - 帮助索引文件(造字程序)
EUDCEDIT.EXE - 造字程序
EUDCEDIT.HLP - 帮助文件(造字程序)
EUDCEDIT.INF - 安装信息文件(造字程序)
EVX16.DOS - 网卡驱动程序
EWRK3.DOS - 网卡驱动程序
EWRK3.SYS - 网卡驱动程序
EXCEL.XLS - Excel5.0文件模板
EXCEL4.XLS - Excel4.0文件模板
EXCHANGE.TXT - Inbox和Exchange的自述文件
EXCHNG.CNT - Mail/Exchange帮助文件内容
EXCHNG.HLP - Mail/Exchange组件
EXCHNG32.EXE - 对用户的交换机作初始设置
EXPLORER.AVI - 影片剪辑(AVI)(如何使用资源管理器)
EXPLORER.EXE - "资源管理器"应用程序
EXPO.HLP - 帮助文件(产品信息)
EXPOSTRT.EXE - 产品信息应用程序
EXTRACT.EXE - 解压缩工具
EXTRA.TXT - 自述文件(联机访问附加文件)

F ↑
FAQ.TXT - 疑难解答自述文件
FAXCODEC.DLL - 传真编码/译码器
FAXCOVER.EXE - 封面编辑器
FC.EXE - DOS命令,比较两个文件
FD16-700.MPD - SCSI驱动程序
FD8XX.MPD - SCSI驱动程序
FDISK.EXE - DOS命令,在硬盘上建立、删除及显示当前分区
FILESEC.VXD - 文件存取控制管理器
FILEXFER.CNT - 文件传输帮助文件内容
FILEXFER.EXE - Microsoft文件传输
FIND.AVI - 影片剪辑(如何使用查找)
FIND.EXE - 寻找指定字符串命令
FINDMVI.DLL - 媒体视觉支持
FINSTALL.DLL - 字库安装程序
FINSTALL.HLP - 字库安装帮助文件
FLSIMTD.VXD - PCMCIA支持
FLSIMTD.VXD - PCMCIA支持
FONT16.EXE - DOS6.22中文版16点阵字体驱动程序
FONTS.INF - 字体选择初始化信息
FONTVIEW.EXE - 字体浏览程序
formAT.COM - DOS磁盘格式化工具
FOUTLINE.EXE - 轮廓字体驱动程序
FRAMEBUF.DRV - SVGA显示器驱动程序
FTE.DLL - 声音浏览文件传输工程文件
FTP.EXE - 文件传输协议TCP工具
FURELI~1.RMI - MINI序列
G ↑
GBK.TXT - 中文Windows95GBK代码集字符定义表
GDI.EXE - 简版WIN3.1图形界面
GDI32.DLL - 32位GDI图形界面
GENERAL.IDF - 一般MIDI指示器
GRPCONV.EXE - Windows程序组转换器
GUIDE.EXE - 应用程序(MSN)

H ↑
HARDWARE.TXT - 硬件自述文件
HOSTS.SAM - TCP配置
HPCLRLSK.ICM - 打印简介
HPDESK.ICM - 打印机简介表
HPDSKJET.DRV - 打印机驱动程序
HPEISA.VXD - 网络适配器驱动程序
HPJAHLP.CNT - JetAdmin程序帮助文件
HPJD.DLL - HPJetAdmin支持程序
HPLAN.DOS - 网络适配器驱动程序
HPLJ300.DRV - HPLJ300DPI打印机驱动程序
HPLJ300.EXE - MSDOS命令(HP打印机驱动)
HPLJ-31.SPD - 打印机驱动程序
HPLJ600.DRV - HPLJ600DPI打印机驱动程序
HPLJP-V4.INF - 打印机安装信息
HPNETPRN.INF - HPJetAdmin支持程序
HPPJXL31.SPD - 打印机驱动程序
HPPLOT.DRV - 打印机驱动程序
HPPLOT.HLP - 打印机驱动程序帮助文件
HPPRARBK.DLL - HPJetAdmin支持程序
HPPRARRK.HLP - HPJetAdmin支持程序帮助文件
HPVCM.HPM - 打印机驱动程序
HSFLOP.PDR - HSFLOP虚拟设备
HTICONS.DLL - 终端设备动态链接库
HYPERTRM.CNT - 终端设备帮助文件
HYPERTRM.EXE - 终端设备应用程序
HYPERTRM.HLP - "超级终端"帮助
HZKBD.EXE - 常用输入方法程序
HZVIO95.EXE - 显示驱动程序

I ↑
I82593.DOS - 网络适配器驱动程序
IB401917.SPD - 打印机驱动程序
IBM20470.SPD - 打印机驱动程序
IBM20K.DOS - 网络适配器驱动程序
ICM32.DLL - 图象颜色匹配程序
ICMOI.DLL - 用户界面颜色匹配程序
ICONLIB.DLL - 图符库
IEXPLORE.CNT - 帮助索引文件(IE)
IEXPLORE.EXE - InternetExplore
IEXPLORE.HLP - 帮助文件(IE)
IFSHLP.SYS - 文件系统安装帮助文件
IFSMGR.VXD - 文件系统安装管理程序
IMAGEOIT.EXE - 图象编辑器光标程序
IMCLIENT.DLL - Microsoft网络组件
IME.CNT - 帮助索引文件(中文输入法)
IME.HLP - Windows帮助文件
IME.INF - 安装信息文件(中文输入法)
IMEGEN.CNF - 帮助索引文件(输入法生成器)
IMEGEN.EXE - 输入法生成器
IMEGEN.HLP - 帮助文件(输入法生成器)
IMEINFO.INI - 输入法初始化文件
IMM32.DLL - WIN32IMM应用程序界面
INBOX.EXC - 邮件组件
INDICDLL.DLL - 多语言组件
INET.TXT - IE自述文件
INET16.DLL - 动态链接库(支持IE2.0)
INETAB32.DLL - 动态链接库(支持Internet mail)
INETCFG.DLL - 动态链接库(支持IE2.0)
INETCPL.CPL - 控制面板文件(配置IE2.0)
INETMAIL.INF - 安装信息文件(Internet mail)
INETWIZ.EXE - Internet安装向导
INformS.WPF - 样板文件
INSTBE.BAT - Microsoft网络组件
INSTDICT.EXE - MSDOS命令(输入法安装程序)
INTB.VXD - 13号中断虚拟设备
INTL.CPL - 控制面板
INT-MAIL.CNT - 帮助索引文件(Internet mail)
IOS.INI - 设置需要安全保护的程序
IOSCLASS.DLL - CDROM安装程序
IRMATR.DOS - 网络适配器驱动程序
ISAPNP.VXD - ISA总线即插即用程序
 ↑
JOY.CPL - 游戏杆控制面板
JOYSTICK.INF - 多媒体安装信息
JP350.DRV - 打印机驱动程序
JUNGLE~1.WAV - 声音文件

K ↑
KBDBE.KBD - 比利时键盘格式
KBDBR.KBD - 巴西键盘格式
KBDCA.KBD - 法国、加拿大键盘格式
KBDOS.KBD - 美国键盘格式
KDCOLOR1.SPD - 打印机驱动程序
KERNEL32.DLL - 32位内核
KEYB.COM - 将控制键盘程序装入内存
KODAKCE.ICM - 柯达ICC配置文件
KRNL386.EXE - Core应用程序

L ↑
LABEL.EXE - DOS命令,设置磁盘名称
LFNBK.EXE - 长文件名备份文件
LFNBK.TXT - LFNBK的自述文件
LICENSE.HLP - Windows帮助文件
LMSCRIPT.EXE - LAN管理器文稿处理程序
LOGIN.EXE - Win95登录NetWare文件
LQ1600K.EXE - LQ1600K打印驱动程序

M ↑
MAILMSG.DLL - 微软网络组件
MAILOPT.INF - MAIL/MAPI设置文件
MAPI.DLL - Mail/Exchange组件
MCIAVI.DRV - 多媒体驱动程序
MCICDA.DRV - MCICD声音驱动程序
MCIOLE.DLL - MCIOLE句柄
MCIPIONR.DRV - MCI光盘驱动程序
MCISEQ.DRV - MCI定序器驱动程序
MCIVISCA.DRV - MCIVCR驱动程序
MCIWAVE.DRV - MCI Ware驱动程序
MDMNOKIA.INF - 安装信息文件(modem)
MDMNOVA.INF - 安装信息文件(modem)
MDMVV.INF - 安装信息文件(modem)
MEMMAKER.EXE - 内存管理程序
MEMMAKER.INF - 内存管理程序设置信息
MFCUIA32.DLL - OLEI公共对话动态链接库
MIDI.INF - 即插即用MIDI设备信息
MINET32.DLL - 支持Internet Mail动态链接库
MKECR5XX.MPD - SCSI驱动程序
ML3XEC16.EXE - 应用程序(MAPI)
MLSHEXT.DLL - 微软核扩展库
MMCI.DLL - 媒体类安装程序
MMDEVLDR.VXD - 即插即用设备装载程序
MMDRV.HLP - 多媒体帮助文件
MMSOUND.DRV - 多媒体驱动程序
MMSYSTEM.DLL - 多媒体系统内核
MMTASK.TSK - 多媒体背景任务交换器
MODE.COM - DOS命令
MODERN.FON - 字体文件(modem)
MORE.COM - DOS命令
MOUSE.DRV - 鼠标驱动程序
MOVEWIN.AVI - 影片剪辑(如何移动窗口)
MPLAYER.EXE - 媒体播放程序
MPR.DLL - WIN32网络接口动态链接库
MSAB32.DLL - 微软网络地址簿
MSBASE.INF - 设置信息
MSCDEX.EXE - DOS MSCDEX CDROM扩展工具
MSCDROM.INF - 类安装设置信息
MSD.EXE - 微软诊断工具
MSD.INI - 微软诊断初始化
MSDET.INF - 系统检测设置信息
MSDISP.INF - 显示设置信息
MSDLG.EXE - 数据链接控制协议
MSDOS.INF - 设置信息
MSDOSDRV.TXT - 设备驱动程序自述文件
MSFT.VRL - 统一资源定位文件
MSGSRV32.EXE - Windows32位虚拟设备信息系统
MSHDC.INF - 硬盘控制设置信息
MSJSTICK.DRV - 即插即用游戏杆驱动程序
MSMAIL.INF - Mail/MAPI初始化
MSMOUSE.INF - 鼠标设置信息
MSN.TXT - 微软网络自述文件
MSNET32.DLL - 微软32位网络API库
MSNEXCH.EXE - 微软网络设置程序
MSNPSS.HLP - 微软网络帮助文件
MSNVER.TXT - 微软网络帮助信息
MSPAINT.EXE - 画图工具
MSPCIC.DLL - PCMCIA类安装与控制工具
MSPORTS.INF - 公共设置信息
MSPP32.DLL - 微软网络打印支持程序
MSPWL32.DLL - 口令清单管理库
MSSBLST.DRV - 声霸卡驱动程序
MSSBLSI.VXD - 声霸卡驱动程序
MSSHRVI.DLL - 共享内核扩展程序
MSSNDSYS.DRV - Windows声音系统驱动程序
MSSP.VXP - Windows NT安全支持
MSTCP.DLL - TCP用户界面
MSVIEWUT.DLL - 显示设备服务数据链接库
MTMMINIP.MPD - SCSI驱动程序
MULLANG.INF - 多种语言字体支持设置信息
MVIWAVE.DRV - 声音驱动程序

N ↑
NBTSTAT.EXE - TCP工具
NDDEAPI.DLL - Workgroups DDE共享接口
NDDENB.DLL - 微软网络DDE NetBIOS接口
NDISHLP.SYS - 实模式NDIS支持驱动程序
NET.EXE - 实模式网络客户软件
NET.INF - 网络检测信息
NET.MSG - 网络客户信息
NET3COM.INF - 网络设置信息
NETAMD.INF - 网络设置信息
NETAPI.DLL - 网络应用程序接口动态链接库
NETAPI32.DLL - 32位网络API动态链接库
NETAVXT.INF - MS内部传输文件
NETBEUI.VXD - 32位NetBEUI协议
NETBIOS.DLL - NetBIOSAPI库
NETDCA.INF - 安装信息文件
NETDDE.EXE - Windows网络动态数据交换
NETDET.INI - NetWare检测文件
NETDI.DLL - 网络设备安装
NETH.MSG - 网络客户帮助信息
NETOS.DLL - NOS检测DLL
NETWATCH.EXE - 网络观测程序
NETWORK.TXT - 网络信息自述文件
NOTEPAD.EXE - 记事本应用程序
NODRIVER.INF - 即插即用设备信息
NOTEPAD.EXE - NOTEPAD文件
NSCL.VXD - NSCL虚拟设备
NW16.DLL - NetWare客户
NWAB32.DLL - 地址簿支持动态链接库
NWLSCON.EXE - 登录文稿控制台程序
NWLSPROC.EXE - NetWare登录处理器
NWNET32.DLL - NetWare客户
NWNP32.DLL - NetWare组件
NWREDIR.VXD - NetWare重定向
NWSERVER.VXD - NCP服务
NWSP.VXD - NCP服务安全提供

O ↑
OEMREVA.INF - 安装信息文件
OLE2.DLL - OLE2.0动态链接库
OLE2.INF - OLE设置信息
OLE32.DLL - 32位OLE2.0组件
OLEAUT32.DLL - OLE2-32自动化
OLECL1.DLL - 对象链接与嵌入客户库
OLEDLG.DLL - Windows OLE2.0用户接口支持
OLESVR.DLL - 对象链接与嵌入服务端库
OLETHK32.DLL - OLE形实替换程序库

P ↑
PACKAGER.EXE - 对象包装程序
PARALINK.VXD - 远程网络存取并行口驱动程序
PBRVSH.EXE - "画图"应用程序
PDOS95.BAT - 进入中文DOS状态
PERF.VXD - 系统性能监视器
PIFMGR.DLL - 程序信息文件管理服务程序
PING.EXE - TCPPing工具
PMSPL.DLL - LAN管理应用程序接口
POWER.DRV - 高级电源管理驱动程序
PPPMAC.VXD - Windows虚拟PPP驱动程序
PRINT.EXE - DOS打印文件
PRINTERS.TXT - 打印信息自述文件
PROGMAN.EXE - 程序管理器
PRTVPD.INF - 打印机升级设置信息

Q ↑
QUIKVIEW.EXE - 快速查看
QUIT.EXE - 退出中文DOS状态

R ↑
README.TXT - Windows95自述文件
REGEDIT.EXE - 注册编辑器
REGSERV.EXE - 远程注册
REGWIE.EXE - 注册工具
REGSERV.INF - 远程注册
RESTORE.EXE - DOS命令
RNAAPP.EXE - 拨号网络应用程序
RNASERV.DLL - 远程网络存取服务
RNASETUP.DLL - 远程网络存取设置动态链接库
RNATHUNK.DLL - 远程网络存取转换支持动态链接库
RNAUI.DLL - 远程网络存取用户接口DLLRNDSRV32.DLL复制服务程序
ROBOTZCL.WAV - 声音文件
ROBOTZWI.WAV - 声音文件
ROMAN.FON - 字型文件
ROUTE.EXE - TCP/IP ROUTE命令
RPCLTC1.DLL - 远程调用库
RPCNS4.DLL - 远程调用库
RPCPP.DLL - 远程调用打印驱动
RPCRT4.DLL - 远程调用库
RPCSS.EXE - 远程调用结点映象
RPLBOOT.SYS - 远程程序装入
RPLIMAGE.DLL - 远程程序装入磁盘映象器
RSRC16.DLL - 资源计量器
RSRCMTR.EXE - 资源计量器
RSRCMTR.INF - 资源计量器
RUMOR.EXE - DDE测试/游戏
RUNDLL.EXE - 把DLL作为应用程序运行
RUNDLL32.EXE - 32位壳组件
S ↑
S3.DRV - S3显示驱动
S3.VXD - S3虚拟设备
SACLIEN.DLL - Microsoft网络组件
SAMPLEVIDEOS - 图象文件
SAPNSP.DLL - Winsock数据连接库
SAVE32.COM - 安装时所需的TSR文件
SB16.VXD - 16位声卡虚拟设备
SB16SND.DRV - 16位声卡驱动
SBAWE.VXD - AWE声卡虚拟设备
SBAWE32.DRV - AWE声卡驱动
SBFM.DRV - 16位声卡驱动
SCANDISK.BAT - MSDOS6.x Scandisk的替代存根模块SCANDISK.BAT磁盘诊断工具
SCANDISK.INI - 磁盘诊断工具
SCANDISK.PIF - 安装磁盘诊断工具时的PIF文件
SCANDSKW.EXE - 磁盘扫描工具
SCANPROG.EXE - 磁盘扫描工具
SCRNSAVE.SCR - 屏幕保护
SCSI.INF - SCSI安装文件文件名描述
SCSIIHLP.VXD - SCSI支持文件
SCSIPORT.PDR - SCSI虚拟设备口
SECUR32.DLL - Microsoft Win32安全服务
SECURCL.DLL - Microsoft网络组件
SEIKO24E.DRV - 打印机驱动
SEIKOSH9.DRV - 打印机驱动
SERIAL.VXD - 串口VCOMM驱动器
SERIFE.FON - 字型文件
SERVER.HLP - 服务器帮助文件
SETMDIR.EXE - SBS文件
SETUP.BIN - 安装支持文件
SETUP.BMP - 安装Wash位图文件
SETUP.EXE - Windows95安装程序
SETUP.INF - 安装信息文件
SETUP.TXT - 安装时的README文件
SETUP4.DLL - 安装支持文件
SETUPPP.INF - 安装信息
SETUPX.DLL - 安装支持
SETVER.EXE - MSDOS版本显示,该程序可在网络上执行
SF4029.EXE - 打印机驱动
SHARE.EXE - MSDOS共享实用程序
SHELL.INF - 安装壳信息
SHELL.VXD - 虚拟壳设备
SHELL2.INF - 颜色组合
SHELL3.INF - 颜色组合
SIZE1-1.CUR - 光标
SIZE1-M.CUR - 光标
SIZE4-M.CUR - 光标
SIZENESW.ANI - 活动光标
SIZEWE.ANI- 活动光标
SKPSFA-1.SPD - 打印机驱动
SLAN.DOS - 网络适配器驱动
SLCD32.MPD - SCSI驱动器
SLENH.DLL - 高级节能选项
SMALLE.FON - 字型文件
SMALLF.FON - 字型文件
SMARTDRV.EXE - 超高速缓存程序
SMARTND.DOS - 网络适配器驱动器
SMC3000.DOS - 网络适配器驱动器
SMC9000.VXD - 网络适配器驱动器
SNAPSHOT.EXE - 抽点
SNAPSHOT.VXD - 抽点虚拟设备
SNDREC32.EXE - 录音机
SNIP.VXD - 网络适配驱动器
SOCKET.VXD - Windows虚拟Socket网卡驱动器SOCKET.VXD PCMCIA支持
SOL.CNT - 纸牌游戏
SOL.HLP - 纸牌游戏帮助文件
SORT.EXE - MSDOS分类实用程序
SOUNDREC.CNT - 录音机帮助文件内容
SOUNDREC.HLP - 录音机帮助文件
SPARROW.WPD - SCSI驱动器
SPARROWX.MPD - SCSI驱动器
SPOOL32.EXE - 打印机支持
SPOOLER.VXD - 打印机共享虚拟设备
SRAMMTD.VXD - PCMCIA支持
SSERIFE.FON - 字型文件
SSERIFF.FON - 字型文件
SSFLYWIN.SCR - 屏幕保护
SSSTARS.SCR - 屏幕保护
STAR24E.DRV - 打印机驱动
STAR9E.DRV - 打印机驱动
START.EXE - 启动程序
STATE.PBK - Microsoft网络组件
STDOLE.TLB - OLE2.0文件
STDOLE32.TLB - OLE2-32文件
STEMO409.DLL - Windows95帮助文件的DLL
STLSO4SS.SPD - 打印机驱动程序
STLS577U.SPD - 打印机驱动程序
STORAGE.DLL - OLE存储器管理库
STRN.DOS - 网络适配器驱动
SUBST.EXE - MSDOS Subst实用程序
SUEXPAND.DLL - LZ DLL安装
SUHELPER.BIN - 安装支持
SUPERVGA.DRV - 高级VGA显示驱动
SURPORT.TXT - PSS支持信息
SVCPROP.DLL - Microsoft网络组件
SVRAPI.DLL - 32位公用服务器API实用程序
SXCIEXT.DLL - Matrox显示驱动支持文件
SYMBOLE.FON - 字型文件
SYS.COM - MSDOS系统实用程序
SYSCLASS.DLL - 系统类库安装
SYSDETMG.DLL - 系统检测库
SYSEDIT.EXE - 系统编辑器
SYSLOGO.RLE - 系统标识
SYSMON.EXE - 系统监控程序
SYSMON.HLP - 系统监控帮助
SYSTEM.DRV - 最小Win3.1标准模式
SYSTHUNK.DLL - Windows系统形实替换程序库
SYSTRAY.EXE - 高级节能管理

T ↑
T128.MPD - SCSI驱动器
T160.MPD - SCSI驱动器
T20N3.VXD - 网络适配驱动器
T30ND.DOS - 网络适配驱动器
T338.MPD - SCSI驱动器
TADA.WAV - 声音文件
TAPI.DLL - API通话程序
TAPI.INF - API通话安装信息文件
TAPI32.DLL - 32位形实替换
TAPIADDR.DLL - API通话程序
TAPIEXE.EXE - API通话组件
TAPIINI.EXE - API通话组件
TASKMAM.EXE - 任务管理器
TCCARC.DOS - 网络适配驱动器
TCTOKCH.VXD - 网络适配驱动器
TELEPHON.CPL - 通话帮助
TESTPS.TXT - PostScript测试
TEXTCHAT.EXE - Microsoft网络组件
THEMIC-1.WAV - 声音文件
THINKJET.DRV - 打印机驱动
THREED.VBX - Windows95浏览
T1850.DRV - 打印机驱动
TIMEDATE.CPL - 时间/日期控制面板
TIMES.TTF - 时间字型
TIMESBD.TTF - 时间粗体字型
TIMESBI.TTF - 时间粗斜体字型
TIMESI.TTF - 时间斜体字型
TIMEZONE.INF - 安装信息
TIMLP232.SPD - 打印机驱动
TIPS.txt - 提示和技巧自述文件
TKPHZR32.SPD - 打印机驱动
TLNK.DOS - 网络适配驱动器
TLNK3.VXD - 网络适配驱动器
TMV1.MPD - SCSI驱动器
TOOLHELP.DLL - 16位开发工具帮助器
TOSHIBA.DRV - 打印机驱动
TOUR.EXE - 浏览文件
TPHAIII.ICM - 打印机简介
TRACERT.EXE - TCP/IP IRACEROUTE命令
TREE.COM - MS DOS树实用程序
TREEEDCL.DLL - Microsoft网络组件
TREENVCL.DLL - Microsoft网络组件
TRIUMPHI.SPD - 打印机驱动
TSD32.DLL - 声音压缩管理器
TSENG.DRV - ET4000W32显示驱动
TTY.DRV - 打印机驱动
TTY.HLP - TTY打印机驱动帮助
TYPELIB.DLL - OLE2.0

U ↑
U9415470.SPD - 打印机驱动
UBNEI.DOS - 网络适配器驱动
ULTRA124.MPD - SCSI驱动器
ULTRA24F.MPD - SCSI驱动器
UMDM16.DLL - 通用调制解调器驱动组件
UMDM32.DLL - 通用调制解调器驱动组件
UNIDRV.DLL - Microsoft通用打印机驱动库
UNIDRV.HLP - 通用打印机驱动帮助
UNIMODEM.VXD - 通用调制解调器驱动
USER32.DLL - 32位用户

V ↑
V86MMGR.VXD - V86MMGR虚拟设备
VCACHE.VXD - VCache虚拟设备
VCD.VXD - 虚拟COM驱动程序
VCOMM.VXD - VCOMM驱动程序
VCOND.VXD - Win32控制台
VDMAD.VXD - VDMAD虚拟设备
VER.DLL - 小型Win3.1安装程序16位版动态链接库
VER.NEW - 版本检测与文件安装库
VERSION.DLL - 32位版本动态链接库
VERX.DLL - 安装程序使用的版本动态库
VFAT.VXD - VFAT文件系统
VFD.VXD - 软盘虚拟设备
VFLATD.VXD - 虚拟平板帧缓存虚拟设备
VGA.DRV - VGA显示驱动程序
VIDCAP.INF - 即插即用VCD信息
VIDEOT.VXD - 视频虚拟设备
VIP.386 - TCP/IP虚拟IP设备
VJOYD.VXD - 游戏棒虚拟设备
VKD.VXD - 虚拟键盘设备
VLB32.DLL - Mail/Exchange组件
VMD.VXD - Win3.1虚拟鼠标驱动程序
VMM.VXD - 虚拟存储管理设备
VMM32.VXD - 虚拟存储管理设备
VMOUSE.VXD - 虚拟鼠标驱动程序
VNBT.386 - NetBIOS传输驱动程序
VNETBIOS.VXD - VNETBIOS虚拟设备
VNETSUP.VXD - 网络支持虚拟设备
VPD.VXD - 虚拟LPT驱动程序
VPICD.VXD - 虚拟可编程干扰控制器设备
VPOWERD.VXD - 高级电源管理虚拟设备
VREDIR.VXD - Microsoft网络32位客户端程序
VSAMI.DLL - AMI文件语法分析程序
VSASC8.DLL - ASCII文件语法分析程序
VSBMP.DLL - BMP文件语法分析程序
VSERVER.VXD - Microsoft网络32位服务器端程序
VSGIF.DLL - GIF文件语法分析程序
VSHARE.VXD - 32位共享虚拟设备驱动程序
VSMSW.DLL - Win写文件语法分析
VSPP.DLL - PowerPoint语法分析程序
VSRTF.DLL - RTF文件语法分析程序
VSTIFF.DLL - TIFF文件语法分析程序
VSW6.DLL - Word6文件语法分析程序
VSWORD.DLL - Word文件语法分析程序
VSWP5.DLL - WordPerfect5文件语法分析程序
VSXL5.DLL - Excel文件/图表语法分析程序
VTCP.386 - TCP/IP虚拟TCP驱动程序
VTDAPI.VXD - VTDAPI虚拟设备
VTDI.386 - 传输驱动接口支持程序
VXDLDR.VXD - 虚拟设备驱动程序装载器

W ↑
WAVE.INF - 即插即用音波设备信息
WDTOOOEX.MPD - SCSI驱动
WGPOADMN.DLL - Mail/Exchange组件
WHLP16T.DLL - 帮助动态链接库
WIN87EM.DLL - 80387数学仿真库
WINABC.HLP - 智能ABC帮助文件
WINBX.HLP - 表形码输入法帮助文件
WINCHA.HLP - 繁体仓颉输入法帮助文件
WINDOWS.CNT - Windows95帮助文件内容
WINDOWS.HLP - Windows95帮助文件
WINFILE.CNT - 文件管理器帮助文件内容
WINFILE.EXE - Windows工作组文件管理器
WINFILE.HLP - 文件管理器帮助文件
WINGB.HLP - 区位码输入法帮助文件
WINHLP23.HLP - Windows帮助文件
WINIME.HLP - 操作指南帮助文件
WINNM.HLP - GBK内码输入法帮助文件
WININIT.EXE - Windows初始化文件
WINIPCFG.EXE - TCP/IP配置工具
WINNEWS.TXT - Winnews信息
WINPHO.HLP - 繁体注音输入法帮助文件
WINPOPUP.EXE - POPUP工具
WINREG.DLL - 远程注册支持
WINPY.HLP - 全拼输入法帮助文件
WINSOCK.DLL - Windows的套接API
WINSY.HLP - 双拼输入法帮助文件
WINXSP.HLP - GBK双拼输入法帮助文件
WINXZM.HLP - GBK郑码输入法帮助
WINZM.HLP - 郑码输入法帮助文件
WNASPI32.DLL - Windows DLL32位ASPI
WPSUNI.DRV - 传真驱动程序
WPSUNIRE.DLL - WPS主机资源执行程序

X ↑
XCOPY.EXE - DOS XCOPY工具
XCOPY32.EXE - 文件拷贝程序
XGA.DRV - XGA显示驱动程序

posted @ 2006-03-31 13:49 高山流水 阅读(191) | 评论 (0)编辑 收藏

国外经济学家认为,西方工业化是 三分靠技术,七分靠管理 ,尤其是人力资源管理,更是企业发展的巨大动力。我们的企业经营管理者可以结合我国国情和自身特点,从中有所借鉴和创新。  

  一、 抽屉式 管理 

  在现代管理中,它也叫做 职务分析 。当今一些经济发达国家的大中型企业,都非常重视 抽屉式 管理和职位分类,并且都在 抽屉式 管理的基础上,不同程度地建立了职位分类制度。据调查统计:泰国在 1981 年采用 抽屉式 管理的企业为 50% 。在 1985 年为 75% ,而在 1999 年为 95% 以上。最近几年,香港的大中型企业也普遍实行 抽屉式 管理。  

   抽屉式 管理是一种通俗形象的管理术语,它形容在每个管理人员办公桌的抽屉里,都有一个明确的职务工作规范,在管理工作中,既不能有职无权,也不能有责无权,更不能有权无责,必须职、责、权、利相互结合。  

  企业进行 抽屉式 管理有如下五个步骤:  

  第一步,建立一个由企业各个部门组成的职务分析小组;  
  第二步,正确处理企业内部集权与分权关系;  
  第三步,围绕企业的总体目标,层层分解,逐级落实职责权限范围;  
  第四步,编写 职务说明 职务规格 ,制定出对每个职务工作的要求准则;  
  第五步,必须考虑到考核制度与奖惩制度相结合。  

  二、 危机式 管理 

  在世界著名大企业中,随着世界经济竞争日趋激烈化,相当一部分进入维持和衰退阶段,柯达、可口可乐。杜邦、福特这样的大企业,也曾出现大量的经营亏损。为改变状况,美国企业较为重视推行 危机式 生产管理,掀起了一股 末日管理 的浪潮。  

  美国企业界认为,如果一位经营者不能很好地与员工沟通,不能向他的员工们表明危机确实存在,那么他很快就会失去信誉,因而也会失去效率和效益。美国技术公司总裁威廉.伟思看到,全世界已变成一个竞争的战场,全球电讯业正在变革中发挥重要作用。因此,他启用两名大胆改革的高级管理人员为副董事长,免去 5 名倾向于循序渐进改革的高级人员职务,在职工中广泛宣传某些企业由于忽视产品质量、成本上升、导致失去用户的危机,他要全体员工知道,如果技术公司不把产品质量、生产成本及用户时刻放在突出位置,公司的末日就会来临。  

  三、 一分钟 管理  

  目前,西方许多企业纷纷采用 一分钟 管理法则,并取得了显著的成效。具体内容为:一分钟目标、一分钟赞美及一分钟惩罚。  

  所谓一分钟目标,就是企业中的每个人都将自己的主要目标和职责明确地记在一张纸上。每一个目标及其检验标准,应该在 250 个字内表达清楚,一个人在一分钟内能读完。这样,便于每个人明确认识自己为何而干,如何去干,并且据此定期检查自己的工作。  

  一分钟赞美,就是人力资源激励。具体做法是企业的经理经常花费不长的时间,在职员所做的事情中,挑出正确的部分加以赞美。这样可以促使每位职员明确自己所做的事情,更加努力地工作,使自己的行为不断向完美的方向发展。  

  一分钟惩罚,是指某件事应该做好,但却没有做好,对有关的人员首先进行及时批评,指出其错误,然后提醒他,你是如何器重他,不满的是他此时此地的工作。这样,可使做错事的人乐于接受批评,感到愧疚,并注意避免同样错误的发生。  

   一分钟 管理法则妙就妙在它大大缩短了管理过程,有立竿见影之效果。一分钟目标,便于每个员工明确自己的工作职责,努力实现自己的工作目标;一分钟赞美可使每个职员更加努力地工作,使自己的行为趋向完善;一分钟惩罚可使做错事的人乐意接受批评,促使他今后工作更加认真。  

  四、 破格式 管理 

  在企业诸多管理中,最终都通过对人事的管理达到变革创新的目的。因此,世界发达企业都根据企业内部竞争形势的变化,积极实行人事管理制度变革,以激发员工的创造性。  

  在日本和韩国企业里,过去一直采用以工作年限作为晋升职员级别和提高工资标准的 年功制度 ,这种制度适应了企业快速膨胀时期对用工用人的要求,提供了劳动力就业与发展的机会。进入 20 世纪 80 年代以来,这些发达企业进入低增长和相对稳定阶段, 年功制度 已不能满足职员的晋升欲望,使企业组织人事的活力下降。 90 年代初起,日本、韩国发达企业着手改革人事制度,大力推行根据工作能力和成果决定升降员工职务的 破格式 的新人事制度,收到了明显成效。  

     世界大企业人事制度的变革,集中反映出对人的潜力的充分挖掘,以搞活人事制度来搞活企业组织结构,注意培养和形成企业内部的 强人 机制,形成竞争、奋发、进取、开拓的新气象。  

  五、 和拢式 管理  

   和拢 表示管理必须强调个人和整体的配合,创造整体和个体的高度和谐。在管理中,欧美企业主要强调个人奋斗,促使不同的管理相互融洽借鉴。  

  它的具体特点是:  

  ( 1 )既有整体性,又有个体性。企业每个成员对公司产生使命感, 我就是公司 和拢式 管理中的一句响亮口号。  

  ( 2 )自我组织性。放手让下属做决策,自己管理自己。  

  ( 3 )波动性。现代管理必须实行灵活经营战略,在波动中产生进步和革新。  

  ( 4 )相辅相成。要促使不同的看法、做法相互补充交流,使一种情况下的缺点变成另一种情况下的优点。 

  ( 5 )个体分散与整体协调性。一个组织中单位、小组、个人都是整体中的个体,个体都有分散性、独创性,通过协调形成整体的形象。  

  ( 6 )韵律性。企业与个人之间达成一种融洽和谐充满活力的气氛,激发人们的内驱力和自豪感。  

  六、 走动式 管理 

  这是世界上流行的一种创新管理方式,它主要是指企业主管体察民意,了解实情,与部属打成一片,共创业绩。这种管理风格,已显示出其优越性,如:  
  ( l )主管动部属也跟着动。日本经济团体联合会名誉会长土光敏夫采用 身先士卒 的做法,一举成为日本享有盛名的企业家,在他接管日本东芝电器公司前,东芝已不再享有 电器业摇篮 的美称,生产每况愈下。士光敏夫上任后,每天巡视工厂,遍访了东芝设在日本的工厂和企业,与员工一起吃饭,闲话家常。清晨,他总比别人早到半个钟头,站在厂门口,向工人问好,率先示范。员工受此气氛的感染,促进了相互间的沟通,士气大振。不久,东芝的生产恢复正常,并有很大发展。  
  ( 2 )投资小,收益大。走动管理并不需要太多的资金和技术,就可能提高企业的生产力。  
  ( 3 )看得见的管理。就是说最高主管能够到达生产第一线,与工人见面、交谈,希望员工能够对他提意见,能够认识他,甚至与他争辩是非。  
  ( 4 )现场管理。日本为何有世界上第一流的生产力呢?有人认为是建立在追根究底的现场管理上。主管每天马不停蹄地到现场走动,部属也只好舍命陪君子了!  
  ( 5 得人心者昌 。优秀的企业领导要常到职位比他低几层的员工中去体察民意,了解实情,多听一些 不对 ,而不是只听 的。不仅要关心员工的工作,叫得出他们的名字,而且关心他们的衣食住行。这样,员工觉得主管重视他们,工作自然十分卖力。一个企业有了员工的支持和努力,自然就会昌盛。  

  美国麦当劳快餐店创始人雷.克罗克,是美国有影响的大企业家之一,他不喜欢整天坐在办公室里,大部分时间都用在 走动式 管理上,即到所属各公司、各部门走走、看看、听听、问问。公司曾有一段时间面临严重亏损的危机,克罗克发现其中一个重要原因是,公司各职能部门的经理官僚主义突出,习惯躺在舒适的椅背上指手划脚,把许多宝贵的时间耗费在抽烟和闲聊上。于是克罗克想出一个 奇招 ,要求将所有经理的椅子靠背都据掉,经理们只得照办。开始很多人骂克罗克是个疯子,不久大家悟出了他的一番 苦心 ,纷纷走出办公室,开展 走动式 管理,及时了解情况,现场解决问题,终于使公司扭亏转盈,有力地促进了公司的生存和发展。  

posted @ 2006-03-31 13:49 高山流水 阅读(179) | 评论 (0)编辑 收藏

一、windows server 2003 3790版本识别

RTM=release to manufacture (公开发行批量生产)是给硬件制造商的版本!是送去压盘的,不是拿去卖的。

OEM=Original Equipment Manufacturer只能全新安装, 和RTM差不多,只是称呼不同而已。

RTL=retail(零售)正式零售版,可以升级或者全新安装。

VLK=Volume License大量授权版,又称为企业版。无需激活。(网上所谓的简体中文VLK版实际是普通简体中文版加英文VLK版中的8个文件而已)

二、Windows Server 2003的不同版本

  Windows Server 2003 Web版:为快速开发、部署Web服务与应用程序,提供Web托管与服务平台。支持2路
SMP(对称多处理)系统、2GB内存。

  Windows Server 2003标准版:面向中小型企业和部门级应用。支持4路SMP、4GB内存。

  Windows Server 2003企业版:适合中心与大型组织使用,有32位和64位两个版本。支持8节点集群、NUMA;
支持8路SMP,其中32位版支持32GB内存,64位版支持64GB内存。

  Windows Server 2003数据中心版:面向要求强伸缩性和高可用性的企业,有32位和64位两个版本。32位版
支持32路SMP、64GB内存;64位版支持64路SMP、512GB内存;两个版本均支持8节点集群、NUMA

三、windows server 2003 3790版的激活

在正式版算号器没有出来之前,现在流行的激活方式有以下几种:
(1)Reset5.02,在安全模式下运行即可激活,把时间调整为2008年都没有问题,一切使用正常。可以升级。
缺点:激活程序被彻底屏蔽,表现为运行msoobe /a没有任何显示,并且在服务中有一项reset5,开机会自动运
行此服务,C:\WINDOWS\system32\srvany.exe,此程序应该是reset5添加入系统的。

(2)俄罗斯破解,记得在xp时代,只要把setupreg.hiv在安装前替换,然后电话激活就可以达到完美的激活境
界,可在2003下,这样子做之后,当前显示已激活,可如果你调整了时间再开机又会显示要激活,甚至是不能
使用。估计次次问题关键还是在那个setupreg.hiv文件。

(3)在论坛上有人贴出了一个Winxpactivation.exe的文件,号称可以激活,实际上这个还是假激活,暂时屏
蔽了激活程序,是不能够修改时间的。

(4)用替换法做出来的伪VLK,安装使用都没有问题,只是不能升级。VLK是替换英文版的8个文件.但是SN已经
被微软封掉了.所以不能升级,但是此法是最稳定的,没有任何问题。

结论:推荐大家用8个替换法激活和reset5.02激活!


四、win 2003 server的一些优化设置


1.禁用配置服务器向导:

禁止“配置你的服务器”(Manage Your Server)向导的出现:在控制面板(Control Panel) -> 管理员工具
(Administrative Tools )-> 管理你的服务器(Manage Your Server)运行它,然后在窗口的左下角复选“
登录时不要显示该页”(Don't display this page at logon)。

2.启用硬件和DirectX加速

★硬件加速:桌面点击右键--属性(Properties) -> 设置(Settings )--高级( Advanced )--
疑难解答(Troubleshoot)。把该页面的硬件加速滚动条拉到“完全”( Full),最好点击“确定”(OK)保
存退出。这期间可能出现一瞬的黑屏是完全正常。

★DirectX加速:打开“开始”(Start) -> “运行”(Run),键入“dxdiag”并回车打开“DirectX 诊
断工具”(DirectX Tools),在“显示”(Display)页面,点击DirectDraw, Direct3D and AGP Texture 加
速三个按钮启用加速。把“声音的硬件加速级别”(Hardware Sound Acceleration Level)滚动条拉到“完全
加速”( Full Acceleration)。

3. 启用声卡:

系统安装后,声卡是禁止状态,所以要在 控制面板 -> 声音 -> 启用,重启之后再设置它在任务栏显示。
如果你使用的是Windows server 2003标准版请从第二步xx作,因为标准版已允许声音服务。
★打开“开始”(Start) -> “运行”(Run),键入“Services.msc ”,在出现的窗口中找到
“Windows Audio”并双击它,然后在启动模式(startup type )的下拉菜单选择“自动”(Automatic),
并点击“应用”(Apply) ->“开始”(Start) -> “确定”(OK)

★打开“开始”(Start) -> “运行”(Run),键入“dxdiag”并回车打开“DirectX 诊断工具”
(DirectX Tools),在“Sound”(Display)页面,把“声音的硬件加速级别”
(Hardware Sound Acceleration Level)滚动条拉到“完全加速”( Full Acceleration)。

4. 如何启用 ASP 支持:

Windows Server 2003 默认安装,是不安装 IIS 6 的,需要另外安装。安装完 IIS 6,
还需要单独开启对于 ASP 的支持。方法是: 控制面板 -> 管理工具 ->
Web服务扩展 -> Active Server Pages -> 允许。

5. 如何启用 XP 的桌面主题:

★打开“开始”(Start) -> “运行”(Run),键入“Services.msc ”,选themes“主题”(默认是禁止的)
,然后改为“自动”,按“应用”,选“开启”。
★接着点“桌面”的属性,在“主题”里选“windows xp”
★我的电脑----属性----高级----性能-----在桌面上为图标标签使用阴影

6. 禁止关机时出现的关机理由选择项:

关机事件跟踪(Shutdown Event Tracker)也是Windows server 2003区别于其他工作站系统的一个设置,
对于服务器来说这是一个必要的选择,但是对于工作站系统却没什么用,我们同样可以禁止它。
打开”开始“Start ->”运行“ Run ->输入”gpedit.msc “,在出现的窗口的左边部分,
选择 ”计算机配置“(Computer Configuration )-> ”管理模板“(Administrative Templates )
-> ”系统“(System),在右边窗口双击“Shutdown Event Tracker” 在出现的对话框中选择“禁止”
(Disabled),点击然后“确定”(OK)保存后退出,这样,你将看到类似于windows 2000的关机窗口

7. 如何使用USB硬盘、U盘,添加已经有分区的硬盘

我的电脑(单击右键)----管理----磁盘管理-----在相应的硬盘上执行导入和分配盘符**作

8. 在控制面板里显示全部组件:
把 Windows\inf 目录中的 sysoc.inf 文件里的 "hide" 替换掉。

9.禁用Internet Explorer Enhanced Security 和禁止安全询问框的出现
在IE工具选项中自定义设置IE的安全级别。在”安全“(Security)选项卡上拉动滚动条把Internet区域
安全设置为”中“(Medium)或“中低”。自定义设置中将有关的选择“提示”修改为选择“禁止”或“启用”。

10. 禁用开机 CTRL+ALT+DEL和实现自动登陆

★方法1:打开注册表(运行->“Regedit”),再打开:
HKEY_LOCAL_MACHIN|SOFTWARE|MicroSoft|Windows NT|CurrentVersion |Winlogon段,在此段中按右键,新建
二个字符串段,AutoAdminLogon=“1”,DefaultPassword=“为超级用户Administrator所设置的Password”。
注意,一定要为Administrator设置一个密码,否则不能实现自启动。 然后,重新启动Windows即可实现自动登录。

★方法2:管理工具 -> Local Security Settings(本地安全策略) -> 本地策略 -> 安全选项 ->
interactive logon: Do not require CTRL+ALT+DEL,启用之。

★方法3(自动登陆):使用Windows XP的Tweak UI来实现Server 2003自动登陆。
下载:Tweak UI http://www.ssite.org/uppic/sun_pic/...003/tweakui.exe
下载后直接执行tweakui.exe 在左边的面板中选择Logon -> Autologon -> 在右边勾选Log on automatically
at system startup输入你的用户名和域名(如果没有就不写),点击下面的Set Password,输入用户名的密码
,然后点击OK。

11.隐藏文件

Windows Server 2003默认情况下是显示所有的文件夹的,如果你不想这样,可以通过一下方法来隐藏:
打开任意一个文件夹,选择工具(Tools) -> 文件夹选项(Folder Options) -> 查看(View),
调整 显示系统文件夹的内容、隐藏受保护的**作系统文件、隐藏文件和文件夹 三项

12.允许内置的IMAPI CD-Burning服务和支持Windows影像设备服务

.允许内置的IMAPI CD-Burning服务和支持Windows影像设备服务
★假如你希望启用Windows内置的IMAPI CD-Burning服务。做如下xx作:
打开“开始”(Start) -> “运行”(Run),键入“Services.msc ”,在出现的窗口中找到
“IMAPI CD-Burning COM Service ”并双击它,然后在启动模式(startup type )的下拉菜单选择“自动”
(Automatic),并点击“应用”(Apply) ->“开始”(Start) -> “确定”(OK)

★假如你有如数码相机和扫描仪之类的影像设备,你应该打开Windows Image Acquisition 服务。
打开“开始”(Start) -> “运行”(Run),键入“Services.msc ”,在出现的窗口中找到
“Windows Image Acquisition (WIA) ”并双击它,然后在启动模式(startup type )的下拉
菜单选择“自动”(Automatic),并点击“应用”(Apply) ->“开始”(Start) -> “确定”(OK)

13.高级设置

★我们可以修改一些windows server 2003的高级设置以适合工作站的应用环境。
右键点击“我的电脑”(My Computer)--属性(Properties)--高级(Advanced)--性能(Performance)
--设置(Setting)--高级(Advanced),把“处理器计划”(Processor scheduling )和内存使用
(Memory usage)分配给“程序”(Programs)使用。然后点击“确定”(OK.)

★禁用错误报告
右键点击“我的电脑”(My Computer)--属性(Properties)--高级(Advanced)--点击“错误报告”
(Error Reporting )按钮,在出现的窗口中把“禁用错误报告”(Disable Error Reporting)选上并复选“
但在发生严重错误时通知我”(But, notify me when critical errors occur.)

★调整虚拟内存
一些朋友经常会对关机和注销缓慢感到束手无策,解决办法就是禁用虚拟内存,这样你的注销和关机时间可能
会加快很多。右键点击“我的电脑”(My Computer)--属性(Properties)--高级(Advanced)--性能
(Performance)--设置(Setting)--高级(Advanced),点击“虚拟内存”(Virtual memory)部分的
“更改”(Change),然后在出现的窗口选择“无分页文件”。重启系统即可。

14.加快启动和运行速度

★修改注册表,减少预读取,减少进度条等待时间:
开始→运行→regedit启动注册表编辑器,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session
Manager\Memory Management\PrefetchParameters, 有一个键值名为EnablePrefetcher,它的值是3,把它改为
“1”或“5”。找到 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control,
将 WaitToKillServiceTimeout 设为:1000或更小。 ( 原设定值:20000 )
找到 HKEY_CURRENT_USER\Control Panel\Desktop 键,将右边视窗的
WaitToKillAppTimeout 改为 1000, ( 原设定值:20000 )即关闭程序时仅等待1秒。
将 HungAppTimeout 值改为:200( 原设定值:5000 ), 表示程序出错时等待0.5秒。

★让系统自动关闭停止回应的程式。
打开注册表 HKEY_CURRENT_USER\Control Panel\Desktop 键,
将 AutoEndTasks 值设为 1。 ( 原设定值:0 )

★禁用系统服务Qos
开始菜单→运行→键入 gpedit.msc ,出现“组策略”窗口, 展开 "管理模板”→“网络” , 展开 "QoS 数
据包调度程序", 在右边窗右键单击“限制可保留带宽" ,在属性中的“设置”中有“限制可保留带宽" ,选
择“已禁用”,确定即可。当上述修改完成并应用后,用户在网络连接的属性对话框内的一般属性标签栏中如
果能够看到"QoS Packet Scheduler(QoS 数据包调度程序)"。说明修改成功,否则说明修改失败。

★改变窗口弹出的速度:
找到HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics子键分支,在右边的窗口中找到
MinAniMate键值,其类型为REG_SZ,默认情况下此健值的值为1,表示打开窗口显示的动画,把它改为0,则禁
止动画显示,接下来从开始菜单中选择“注销”命令,激活刚才所作的修改。

★禁止Windows XP的压缩功能:
点击“开始”下的“运行”,在“运行”输入框中输入“regsvr32/u zipfldr.dll”,然后按回车键即可。

★设置个性的启动信息或警告信息:
个性化的Windows XP启动:打开注册表编辑器,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT
\CurrentVersion\Winlogon子键分支,双击LegalNoticeCaption健值,打开“编辑字符串”对话框,在“数
值数据”下的文本框中输入自己想要的信息标题,如“哥们儿,你好!”,然后点击“确定”,重新启动。
如果想要改变警告信息的话可以双击LegalNoticeText健值名称,在出现的“编辑字符串”窗口中输入想要显示
的警告信息,单击“确定”,重新启动。

15.安装Java VM
Windows server 2003没有集成MS Java VM或Sun Java VM,你可以自行下载并安装它。

16.安装DirectX 9a

在Windows Server 2003上安装DirectX 9a和在其他版本的Windows上安装DirectX 9a的方法是一样的。安装之前
必须先启用DirectX and Graphics Acceleration。

17.可用的杀毒软件和防火墙:
Symantec Norton Antivirus Corporate 8.01
Zone Alarm 3.7.159
Norton Personal Firewall 2003

五、如何防范ipc$入侵

1、禁止空连接进行枚举(此**作并不能阻止空连接的建立)

首先运行regedit,找到如下组建[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA]把
RestrictAnonymous = DWORD的键值改为:00000001。
restrictanonymous REG_DWORD
0x0 缺省
0x1 匿名用户无法列举本机用户列表
0x2 匿名用户无法连接本机IPC$共享
说明:不建议使用2,否则可能会造成你的一些服务无法启动,如SQL Server

2、禁止默认共享

1)察看本地共享资源
运行-cmd-输入net share
2)删除共享(每次输入一个)
net share ipc$ /delete
net share admin$ /delete
net share c$ /delete
net share d$ /delete(如果有e,f,……可以继续删除)
3)修改注册表删除共享
运行-regedit
找到如下主键[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters]
把AutoShareServer(DWORD)的键值改为:00000000。
如果上面所说的主键不存在,就新建(右击-新建-双字节值)一个主健再改键值。

3、停止server服务

1)暂时停止server服务
net stop server /y (重新启动后server服务会重新开启)
2)永久关闭ipc$和默认共享依赖的服务:lanmanserver即server服务
控制面板-管理工具-服务-找到server服务(右击)-属性-常规-启动类型-已禁用

4、安装防火墙(选中相关设置),或者端口过滤(滤掉139,445等)

1).解开文件和打印机共享绑定

  鼠标右击桌面上[网络邻居]→[属性]→[本地连接]→[属性],去掉“Microsoft网络的文件和打印机共享”前面的勾,解开文件和打印机共享绑定。这样就会禁止所有从139和445端口来的请求,别人也就看不到本机的共享了。

  2).利用TCP/IP筛选

  鼠标右击桌面上[网络邻居]→[属性]→[本地连接]→[属性],打开“本地连接属性”对话框。选择[Internet协议(TCP/IP)]→[属性]→[高级]→[选项],在列表中单击选中“TCP/IP筛选”选项。单击[属性]按钮,选择“只允许”,再单击[添加]按钮(如图2),填入除了139和445之外要用到的端口。这样别人使用扫描器对139和445两个端口进行扫描时,将不会有任何回应。

  3).使用IPSec安全策略阻止对端口139和445的访问

  选择[我的电脑]→[控制面板]→[管理工具]→[本地安全策略]→[IP安全策略,在本地机器],在这里定义一条阻止任何IP地址从TCP139和TCP445端口访问IP地址的IPSec安全策略规则,这样别人使用扫描器扫描时,本机的139和445两个端口也不会给予任何回应。

  4).使用防火墙防范攻击

  在防火墙中也可以设置阻止其他机器使用本机共享。如在“天网个人防火墙”中,选择一条空规则,设置数据包方向为“接收”,对方IP地址选“任何地址”,协议设定为“TCP”,本地端口设置为“139到139”,对方端口设置为“0到0”,设置标志位为“SYN”,动作设置为“拦截”,最后单击[确定]按钮,并在“自定义IP规则”列表中勾选此规则即可启动拦截139端口攻击了(如图3)。

5、给所有账户设置复杂密码,防止通过ipc$穷举密码

六、各种vlk版本的Windows在线更新(win2003 server也可以)

以下地址适合于各种vlk版本的Windows在线更新(实际上是从微软站点下载更新包,然后自行安装)。
该方法不像xp内置在线更新那样检查序列号的合法性。
已经测试,可用。

http://v4.windowsupdate.microsoft.com/zhcn/default.asp?corporate=true

概要
本文介绍了如何更改已分配给网络适配器的 IP 地址。如果您的网络有“动态主机配置协议”(DHCP) 服务器,则会自峙?IP 地址,否则您可以指定 IP 地址。
如何更改分配给网络适配器的 IP 地址使用管理员帐户登录到计算机。
单击开始,指向控制面板,指向网络连接,然后单击您要修改的本地连接。
在连接状态 对话框中,单击属性。
右键单击所需要的本地连接,然后单击属性。屏幕上会出现“本地网络连接属性”对话框。
在“此连接使用下列项目”框中,单击 Internet 协议 (TCP/IP),然后单击属性。屏幕
上会出现“Internet 协议 (TCP/IP) 属性”对话框。
继续执行以下两节中某一节(根据您的环境来选择)中的步骤。


如何自动获取 IP 地址
按以下步骤配置计算机,以便从 DHCP 服务器获取一个 IP 地址。注意,您必须有一个DHCP 服务器。
单击“自动获取 IP 地址”。
如果不想指定“域名系统 (DNS)”服务器的 IP 地址,请单击“自动获取 DNS 服务器地址”。
单击确定。在“本地连接属性”对话框中,单击关闭。
在“本地连接状态”对话框中,单击关闭。
单击开始,然后单击运行。
在打开 框,键入 cmd,然后单击确定。
在命令提示符下,键入 ipconfig /release,然后按 ENTER 键。
键入 ipconfig /renew,然后按 ENTER 键。DHCP 服务器就会给网络适配器分配一个
IP 地址,并且您会看到一条像下面这样的消息:
Windows .NET IP Configuration

Ethernet adapter Local Area Connection:

Connection-specific DNS Suffix .:dns.microsoft.com
IP Address.. . . . . . . . . . . :192.168.0.201
Subnet Mask .. . . . . . . . . . :255.255.255.0
Default Gateway . . . . . . . . . :192.168.0.1

键入 exit,然后按 ENTER 键,退出命令提示。


如何指定 IP 地址
要给网络适配器分配 IP 地址,请按以下步骤xx作:
如果要给网络适配器分配 IP 地址,请单击“使用下面的 IP 地址”。
在“IP 地址”框中,键入希望分配给此网络适配器的 IP 地址。此 IP 地址在您网络的可用地址范围中必须是唯一的。请与网络管理员联系以获取您网络的有效 IP 地址的列表。
在“子网掩码”框中,键入您网络的子网掩码。
在“默认网关”框中,键入网络中将您的网络连接到另一网络或 Internet 的计算机或设备的 IP 地址。
在“首选 DNS 服务器”框中,键入将主机名解析为 IP 地址的计算机的 IP 地址。
在“备用 DNS 服务器”框中,键入在首选 DNS 服务器不可用时您希望使用的 DNS 计算机的 IP 地址。
单击确定。在本地连接属性 对话框中,单击关闭。
在“本地连接状态”对话框中,单击关闭。


疑难解答
IP 地址有冲突:如果尝试分配已被占用的 IP 地址,就会看到以下错误信息:

The static IP address that was just configured is already in use on the
network.Please reconfigure a different IP address.
您的计算机无法连接到网络上的其他计算机:如果给网络适配器分配了不正确的子网掩码地址,那么,该计算机实际上就会位于另外一个网络中,所以您无法连接到网络上的其他计算机。
您的计算机无法使用主机名连接到其他计算机:如果分配了不正确的 DNS 服务器 IP 地址,或者,如果没有使用 DNS 服务器,则无法使用其他计算机的主机名连接到这些计算机。这样您将无法浏览 Internet。您可以使用其他计算机的 IP 地址连接到它们。

要在本地网络中变通解决此问题,可在“主机”文件中添加主机名到 IP 地址的映射。

概要
本文说明如何在基于 Microsoft Windows Server 2003 的计算机中添加附加 LPT 端口。

默认情况下,在 Windows Server 2003 中存在 3 个 LPT 可用端口,它们是 LPT1、LPT2 和 LPT3。可以添加附加 LPT 端口直到 LPT9。添加附加 LPT 端口后,该端口作为可用打印机端口显示在“添加打印机向导”中

如何添加附加 LPT 端口
单击开始,然后单击运行。警告:“注册表编辑器”使用不当可造成严重问题,这些问题可能需要重新安装xx作系统。Microsoft 不保证能够解决因为“注册表编辑器”使用不当而产生的问题。使用“注册表编辑器”需要您自担风险。


在打开 框键入 regedit,然后单击确定。
找到并单击下面的注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports
当前 LPT 端口显示在右窗格中。
在编辑 菜单上,指向新建,然后单击字符串值.
键入新值名称。为此,键入 LPT#,其中 # 是所要添加 LPT 端口的序号,然后按 ENTER。例如,键入 LPT4。
在文件 菜单上,单击退出 退出“注册表编辑器”。
单击开始,然后单击运行。
在打开 框键入 cmd,然后单击确定。
停止然后重新启动假脱机服务。为此,请在命令提示符下键入下列命令,在每行后按ENTER 键:
net stop spooler
net start spooler

键入 exit 退出命令提示符。

概要
本分步指南面向没有域名系统 (DNS) 服务器的新工作组。通过 DNS 服务器,用户可以使用友好 名称与资源进行联系。“友好”名称是表示网络资源的简单英文名称。您可使用 DNS 名称来发布和命名工作组中的所有联网资源。

安装 DNS 服务
在配置之前,必须在服务器上安装 DNS 服务。默认情况下,在安装 Windows Server 2003 的过程中不会安装 DNS。您可以在安装过程之中或之后安装 DNS。
如何在现有的服务器上安装 DNS 服务
单击开始,指向控制面板,然后单击“更改或删除程序”。
单击“添加/删除 Windows 组件”。
在组件 列表中,单击联网服务 (但是请不要选中或者清除该复选框),然后单击详细信息。
单击“域名系统 (DNS) ”复选框,将其选中,然后单击确定。
单击下一步。
出现提示时,将 Windows Server 2003 CD-ROM 插入计算机的 CD-ROM 驱动器或
DVD-ROM 驱动器。
安装完成时,在“完成 Windows 组件向导”页中,单击完成 。
单击关闭 ,以关闭“添加或删除程序”窗口。

如何在安装过程中安装 DNS 服务
要在 Windows Server 2003 的初始安装过程中安装 DNS,请在提示您安装和配置
Windows 组件时,按照本文“ 如何在现有的服务器上安装 DNS 服务 ”一节中的第 3 和第 4 步进行xx作。
配置 DNS 服务器
要正确运行,DNS 服务器需要一个正向搜索区域,以便它的本地域作为定位器记录的宿主。正向搜索区域包含了解析 DNS 域中的名称所必需的信息。您可能还需要配置反向搜索区域,以便使用户可以根据本地资源的 IP 地址确定它的名称。另外,为了尽可能简化 DNS 服务的管理,您应该将这些区域配置成接受动态更新。

在安装 DNS 服务之后,使用“配置 DNS 服务器向导”配置 DNS 服务。


如何配置 DNS 服务
单击开始,指向管理工具,然后单击 DNS。
右键单击服务器名称,其中服务器名称 为该服务器的名称,然后单击配置 DNS 服务器。

“配置 DNS 服务器向导”就会启动。
单击DNS 清单,阅读 DNS 清单,然后单击下一步。
根据 DNS 服务器的角色,单击下面某个选项,然后单击下一步:
创建正向搜索区域(推荐用于小型网络)。对于使用 Active Directory 或者使用
Internet 服务提供商 (ISP) 来解析 DNS 名称查询的小型网络,请使用此选项。通过使用此选项,您可以:
为您的网络使用的 Active Directory 域所对应的 DNS 域创建 DNS 区域。
为位于您的 ISP 的 DNS 服务器所承载的 DNS 区域创建第二个区域。
创建正向和反向搜索区域(推荐用于大型网络)。如果您要给已具有 DNS 结构的大型网络添加 DNS 服务器,请使用此选项。通过使用此选项,您可以:
创建正向和反向所搜区域,以解析对您的 DNS 名称空间的 DNS 域中资源的查询。
指定将 DNS 服务器用作转发器,此 DNS 服务器无法回答的名称查询将会在此被发送。
为您要创建的区域指定复制范围(如果此 DNS 正在 Active Directory 域控制器上运行)。
指定将 DNS 服务器用作转发器,此 DNS 服务器无法回答的名称查询将在此被发送。
为您要创建的区域配置动态更新。
只配置根提示(只推荐高级用户进行此xx作)。如果您要创建纯正向 DNS 服务器,或者,要给当前配置了区域和转发器的 DNS 服务器添加根提示,请使用此选项。
请按照该向导其余各页上的说明进行xx作,来配置您的 DNS 服务器。


如何配置正向搜索区域以允许动态更新
配置了新的正向搜索区域之后,请配置这些区域,以允许动态更新

单击开始,指向管理工具,然后单击 DNS。
展开服务器名称,其中服务器名称 为该服务器的名称,然后展开正向搜索区域。
右键单击为您的域所创建的正向搜索区域,然后单击属性。
单击常规 选项卡,单击“允许动态更新”框中的是 ,然后单击 确定。

概要
本文介绍了如何在 Windows Server 2003 中给本地用户帐户的配置文件指派登录脚本。
此登录脚本在本地用户从本地登录计算机时运行。此登录脚本在用户登录到域时不运行 。

备注: 必须以管理员或管理员组成员身份登录才能完成此步骤。如果您的计算机已联网,则网络策略设置也可能使您无法完成此过程。


如何将登录脚本指派到用户配置文件
单击开始,指向管理工具,然后单击计算机管理。
在控制台树中,展开“本地用户和组”,然后单击用户。
在右窗格中,右键单击所需的用户帐户,然后单击属性。
单击配置文件 选项卡。
在“登录脚本”框中,键入登录脚本的文件名(如果需要,还要键入相对路径)。


备注:如果登录脚本存储在默认登录脚本路径的子文件夹中,要在文件名之前加上该文件夹的相对路径。例如,如果 Startup.bat 登录脚本存储在 \\计算机名称\Netlogon\文件夹名称请键入 文件夹名称\Startup.bat。
单击应用,然后单击确定。
备注:
存储在本地计算机上的登录脚本只适用于登录本地计算机的用户。
本地登录脚本必须存储在使用“Netlogon”共享名称的文件夹中,或者必须存储在 Netlogon 文件夹的子文件夹中。
本地登录脚本的默认位置是 Systemroot\System32\Repl\Imports\Scripts 文件夹。全 新安装的 Windows 中不会创建此文件夹。因此,必须通过使用“Netlogon”共享名称来创建和共享 SystemRoot\System32\Repl\Imports\Scripts 文件夹。
如果您不想在默认位置创建“Netlogon”共享,请将登录脚本放在用户在登录过程中可以访问的任何文件夹中,然后共享此文件夹。

概要
本文介绍了如何通过使用 Windows Server 2003 来配置网络地址转换 (NAT) 服务器。Windows Server 2003“路由和远程访问”服务包括 NAT 路由协议。如果将 NAT 路由协议安装和配置在运行“路由和远程访问”的服务器上,则使用专用 Internet 协议 (IP) 地址的内部网络客户端可以通过 NAT 服务器的外部接口访问 Internet。

如何配置路由和远程访问 NAT 服务器
当内部网络客户端发送要连接 Internet 的请求时,NAT 协议驱动程序会截取该请求,并将其转发到目标 Internet 服务器。所有请求看上去都像是来自 NAT 服务器的外部 IP 地址。这样就隐藏您的内部 IP 地址配置。

配置“路由和远程访问”NAT 服务器:
在管理工具 菜单中,单击“路由和远程访问”。
在“路由和远程访问”MMC 中,展开您的服务器名称(其中服务器名称 是您要配置服务器的名称,然后展开左窗格中的IP 路由 。
右键单击常规,然后单击新建路由协议。
单击NAT/基本防火墙 复选框,将其选中,然后单击确定。
右键单击左窗格中的NAT/基本防火墙 ,然后单击新建接口。
单击表示内部网络接口的接口,然后单击确定。
在“网络地址转换”属性中,单击“专用接口连接到专用网络”,然后单击 确定。
右键单击左窗格中的NAT/基本防火墙 ,然后单击新建接口。
单击表示外部网络接口的接口,然后单击确定。
在“网络地址转换”属性中,单击“公用接口连接到 Internet”。
单击“在此接口上启用 NAT”复选框,将其选中,然后单击确定。
NAT 服务器可以自动为内部网络客户端分配 IP 地址。如果您没有已给内部网络上的客户端分配了地址信息的 DHCP 服务器,则可能会需要使用此功能。


如何配置路由和远程访问 NAT 服务器以分配 IP 地址和执行代理 DNS 查询
NAT 服务器还可以代表 NAT 客户端执行域名系统 (DNS) 查询。“路由和远程访问”NAT服务器对包括在客户端请求中的 Internet 主机名进行解析,然后将该 IP 地址转发给该客户端。

要配置“路由和远程访问”NAT 服务器来分配 IP 地址并且代表内部网络客户端执行代理 DNS 查询,请按以下步骤xx作:
右键单击左窗格中的NAT/基本防火墙 ,然后单击属性。
单击地址分配 选项卡,然后单击“使用 DHCP 自动分配 IP 地址”复选框,将其选中。

在 IP 地址 框中,键入网络 ID。
在掩码 框中,键入子网掩码。
单击名称解析 选项卡,然后单击“使用域名系统 (DNS) 的客户端”复选框,将其选中 。
如果您使用请求拨号接口连接到 Internet,请单击“当名称需要解析时连接到公用网络”复选框,将其选中。
在请求拨号接口 框中,单击要拨号的接口。
单击应用,然后单击确定。
备注:完成这些基本配置步骤之后,内部网络客户端就可以访问 Internet 上的服务器了。

如何配置基于 Windows Server 2003 的计算机以使用 NAT 服务器
单击开始,指向控制面板,指向网络连接,然后单击本地连接。
单击属性。
单击 Internet 协议 (TCP/IP)。
单击属性。
在“默认网关”框中,键入 NAT 服务器的内部 IP 地址。

备注: 如果计算机从“动态主机配置协议”(DHCP) 服务器接收它的 IP 地址,请单击高级,单击IP 设置 选项卡,单击网关 下的添加,键入 NAT 服务器的内部 IP 地址,单击添加,单击确定,然后继续进行第 6 步。
单击确定,单击确定,然后单击关闭。

概要
本文介绍了如何在 Windows Server 2003 中配置打印机和打印服务器设置。还讲述了如何执行某些比较常见的管理性任务,例如,如何配置分隔页和打印通知。

配置打印机设置是在该打印机的打印机属性中进行,配置打印服务器设置是在打印服务器属性中进行。您必须以管理员或管理员组的成员身份登录,才能执行这些步骤。

如何配置打印机设置
请注意,对于不同的打印机,您可以配置的选项可能也不同。本节说明了如何配置在大多数打印机中都可用的一般设置。
单击开始,然后单击“打印机和传真机”。
右键单击要配置的打印机,然后单击属性。
使用下列任意方法(如何合适的话)都可配置您想要的选项:
配置分隔页:
单击高级 选项卡,然后单击分隔页。
要添加分隔页,请在“分隔页”框中键入您要用作分隔页的文件的路径,然后单击确定。或者,单击浏览,找到您要使用的文件,单击打开,然后单击确定。
要删除分隔页,请删除“分隔页”框中的条目,然后单击确定。
配置打印处理器:
单击高级 选项卡,然后单击打印处理器。
在“默认数据类型”框中,单击您要使用的数据类型,然后单击确定。
添加用于 Windows 其他版本的打印机驱动程序:
单击共享 选项卡,然后单击其他驱动程序。
单击要添加的驱动程序旁边的复选框,将其选中,然后单击确定。
修改用户访问权限:
单击安全性 选项卡,然后执行下列xx作之一:
要更改现有用户或组的权限,请在“组或用户名称”列表中单击您要修改其权限的组或用户。
要为新用户或组配置权限,请单击添加。在“选择用户或组”对话框中,键入您要为其设置权限的用户或组的名称,然后单击确定。
在用户或组 的权限 列表中,单击您要允许的权限旁边的允许复选框,将其选中,或者单击要拒绝的权限旁边的拒绝复选框,将其选中。或者,要从“组或用户名称”列表删除用户或组,请单击删除。
单击确定。


如何配置打印机服务器设置
本节介绍了您可以进行配置的某些常见打印服务器设置。
单击开始,然后单击“打印机和传真机”。
在文件 菜单上,单击服务器属性。
使用下列任意方法(根据需要)都可配置您想要的选项:
配置打印机的端口设置:
单击端口 选项卡。
要配置端口,请在“这台服务器上的端口”框中单击您要配置的端口,然后单击配置端口。在传输重试 框中键入秒数(如果打印机失去响应达到此秒数,您就会得到通知),然后单击确定。
要添加新端口,请单击添加端口,然后在“可用端口类型”框中单击您要添加的端口类型,然后单击新端口。在“输入端口名称”框中键入您要指定给新端口的名称,然后单击确定。
要删除端口,请在“这台服务器上的端口”框中单击您要删除的端口,单击删除端口,然后单击是 ,确认删除。
添加、删除或重新安装当前打印机驱动程序:
单击驱动程序 选项卡。
在“安装的打印机驱动程序”框中单击您要修改的驱动程序,然后单击添加、删除,或重新安装 (根据需要)。
按照屏幕上显示的说明添加、删除或重新安装该打印机驱动程序。
打开或关闭打印机通知:

单击高级 选项卡,然后单击“远程文档打印完成时发出通知”复选框,将其选中或清除。

单击高级 选项卡。单击您要的记录后台打印选项(或多个选项)旁边的复选框,将其选中或清除。
单击确定。


概要
本文介绍了如何在创建 Windows Server 2003 映像之前使用 Microsoft Sysprep 工具
来自动完成页面文件的删除(以减少复制映像的时间或减小映像的总体大小)。

备注:Microsoft 建议您不要在域控制器上使用 Sysprep。

警告:“注册表编辑器”使用不当可造成严重问题,这些问题可能需要重新安装xx作系统。Microsoft 不保证能够解决因为“注册表编辑器”使用不当而产生的问题。使用“注册表编辑器”需要您自担风险。

要在创建 Windows Server 2003 映像之前使用 Sysprep 来自动完成页面文件的删除,
请使用以下方法之一。


方法 1
启动“注册表编辑器”(Regedit.exe)。
在下面的注册表项中找到PagingFiles 值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management

双击PagingFiles 值,然后键入以下内容:
C:\pagefile.sys 0 0

单击确定。
退出“注册表编辑器”。
运行 SysPrep。
方法 1 中的注册表设置会在您关闭 Windows 时强制 Windows 删除页面文件。然后,您可以使用您喜欢的方法来创建安装分区映像并将它部署到目标计算机。在目标系统首次引导的过程中,它上面的页面文件设置会将大小调整为与部署后的新系统的内存模块匹配。


方法 2
使用以下任一过程创建一个名为 Zeropage.reg 的注册表 (.reg) 文件:
启动“注册表编辑器”(Regedit.exe)。
在下面的注册表项中找到PagingFiles 值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management

双击PagingFiles 值,然后键入以下内容:
C:\pagefile.sys 0 0

单击确定。
在文件 菜单上,单击导出,然后将该项导出到名为 Zeropage.reg 的文件中。
退出“注册表编辑器”。
- 或 -


将以下文本复制到一个名为 Zeropage.reg 的 .reg 文件:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]"PagingFiles"=hex(7):43,00,3a,00,5c,00,70,00,61,00,67,00,65,00,66,00,69,00,6c
,\00,65,00,2e,00,73,00,79,00,73,00,20,00,30,00,20,00,30,00,00,00,00,00

将以下文本以及任何其他 Sysprep 命令行参数复制到一个名为 Sysprep.cmd 的批处理文件中:
regedit /s a:\zeropage.reg
a:\sysprep -noreboot -pnp

标计算机上的新计算机内存匹配。
概要
本文介绍了如何将程序和 Windows 组件添加到基于 Windows Server 2003 的计算机。

“添加或删除程序”工具会帮助您管理计算机上的程序。使用此工具,您可以添加新的程序或更改、删除现有的程序。您还可以使用“添加或删除程序”工具添加您在最初安装时未安装的 Windows Server 2003 组件(例如“联网服务”)。

如何安装 Windows 组件
以“Administrator”或“Administrator”组成员的身份登录计算机。
单击开始,指向控制面板,然后单击“添加或删除程序”。
单击“添加/删除 Windows 组件”。屏幕上会出现“Windows 组件向导”的“Windows 组件”页,组件 列表中会列出以下组件(此列表中显示的 Windows 组件可能会因所运行的 Windows Server 2003 的版本而异):
附件和工具
证书服务
传真服务
索引服务
Internet Explorer
Internet 信息服务 (IIS)
管理和监视工具
消息队列
联网服务
其它的网络文件和打印服务
POP3 服务
远程安装服务
远程存储
终端服务器
终端服务器授权
UDDI 服务
更新根目录证书
Windows 媒体服务

要添加组件,请单击相应的复选框,将其选中。要删除组件,请单击相应的复选框,将其清除。

备注:带底纹的复选框表示只能安装该组件的一部分。
要查看组件中的内容,请单击该组件,然后单击详细信息。单击要添加的子组件旁边的复选框,将其选中,然后单击确定。

备注:如果无法使用详细信息 按钮(呈灰色),则表明该组件没有与其相关联的子组件。
单击下一步。
按照“Windows 组件向导”其余各页中的说明进行xx作。
单击关闭 ,以关闭“添加或删除程序”对话框。
备注: 使用某些 Windows 组件之前需要先进行配置。如果安装了一个或多个这类组件,但是没有配置它们,那么单击“添加/删除 Windows 组件”时,将显示出必须配置的组件的列表。要配置组件,请单击配置,然后按照屏幕上的说明xx作。要添加新组件,请单击组件,然后按照“Windows 组件向导”中的说明进行xx作。
DHCP 服务的安装示例以“Administrator”或“Administrator”组成员的身份登录计算机。
单击开始,指向控制面板,然后单击“添加或删除程序”。
单击添加/删除 Windows 组件。
在组件 列表中,单击联网服务 (但是请不要选中或清除该复选框),然后单击详细信息。
请单击“动态主机配置协议 (DHCP)”复选框,将其选中(如果没有选中),然后单击确定。
单击下一步。出现提示时,将 Windows Server 2003 CD-ROM 插入您计算机的 CD-ROM 或者 DVD-ROM 驱动器。

安装程序会将 DHCP 服务器和工具文件复制到计算机。
安装完成时,单击“完成“Windows 组件向导””页上的完成 。
单击关闭 ,以关闭“添加或删除程序”对话框。


如何安装程序
要安装程序,请按以下步骤xx作(如果适于您的情况)。
从 CD-ROM 或软盘安装程序
以“Administrator”或“Administrator”组成员的身份登录计算机。
单击开始,指向控制面板,然后单击“添加或删除程序”。
单击添加新程序。
单击“光盘或软盘”。
将软盘插入计算机的软盘驱动器,或者将 CD-ROM 插入计算机的 CD-ROM 或 DVD-ROM 驱动器,然后单击下一步。
按照屏幕上显示的说明进行xx作,以安装该程序。
单击关闭 ,以关闭“添加或删除程序”对话框。
备注:使用“添加/删除程序”工具时,只能安装为 Windows xx作系统编写的程序。


从网络安装程序
以“Administrator”或“Administrator”组成员的身份登录计算机。
种方式安装程序;程序文件已被删除或已经损坏;或者,您尝试使用安装期间没有安装的程序功能。如果程序是从 CD-ROM 安装的,或者您不再连接到网络了,Windows 安装程序可能会提示您将光盘插入 CD-ROM 或 DVD-ROM 驱动器。Windows 安装程序完成时,尝试使用的程序或功能将会启动。

概要
本分步指南介绍了如何在从 Windows NT 4.0 升级至 Windows Server 2003 的计算机上应用注册表“访问控制列表”(ACLs) 和文件系统 ACL。

将基于 Windows NT 4.0 的计算机升级至 Windows Server 2003 时,“Windows 安装程序”不会更改该注册表和文件系统 ACL。Windows Server 2003 允许更高级别的安全性
,并且它处理注册表和文件系统权限的方式有别于 Windows NT 4.0。Microsoft 建议您
将 Windows 2003 ACL 应用到从 Windows NT 4.0 升级的计算机上。

要应用注册表和文件系统 ACL,您可以使用“安全配置和分析”管理单元。请注意,您必须是“Administrators”组的成员,才能执行此过程。

如何在从 Windows NT 4.0 升级至 Windows Server 2003 的计算机上应用默认的系统安全设置
以“Administrator”或“Administrators”组成员的身份登录。
单击开始,单击运行,在打开 框中键入 mmc,然后单击确定。
在文件 菜单上,单击“添加/删除管理单元”。
单击添加、“安全配置和分析”、添加,单击关闭,然后单击确定。
在控制台树中,右键单击“安全配置和分析”,然后单击打开数据库。
指定数据库的名称(例如,upgdbase)和位置,然后单击打开。
在屏幕上出现的导入模板 对话框中,单击设置 Security.inf,然后单击打开。
右键单击“安全配置和分析”,然后单击现在分析计算机。
在屏幕上出现的执行分析 对话框中,接受“错误日志文件路径”框中显示的默认日志文件路径,或指定所需的位置,然后单击确定。

将对该模板安全设置与现有的计算机设置进行比较。

备注:此时,不会对计算机进行任何更改。此过程的结果表明模板中的安全设置与实际系统设置有何区别。
完成分析时,展开控制台树中的各个组件,例如:帐户策略、本地策略、事件日志、受限制的组,以及系统服务。
对于在第 10 步中展开的每个组件,请在策略 列的右窗格中查看它的安全属性项,而且要注意以下几点:
带有绿色选中标记的项表示当前计算机设置与数据库中的安全设置相同。
带有红色“x”的项表示当前计算机设置与数据库中的安全设置不同。
如果未显示绿色选中标记或红色“x”,则未在模板中定义此安全属性,并且也没对其进行分析。


如果您要添加或修改数据库设置,请右键单击要添加或修改的安全属性,然后单击属性。单击“在数据库中定义这个策略”复选框,将其选中(如果尚未选中),对策略设置
进行所需更改,然后单击确定。

备注:数据库设置 列会显示模板中包含的安全设置,计算机设置 列会显示计算机的当前设置。
要将计算机配置为使用数据库中的安全设置,请右键单击“安全配置和分析”,然后单击现在配置计算机。
在屏幕上出现的配置系统 对话框中,接受默认的路径和日志文件名,或者,键入需要的路径和文件名,然后单击确定。

安全数据库配置会应用于计算机。

备注:如果该数据库项目和计算机上的现有安全配置之间存在冲突,除非您在配置计算机之前消除二者之间的区别,否则将改写现有项目。
概要
本文介绍了如何在工作组设置中基于 Windows Server 2003 的计算机上将本地策略应用于除管理员以外的所有用户。

在工作组设置(而非域)中使用基于 Windows Server 2003 的计算机时,可能需要在该计算机上实施本地策略,这些策略可应用于该计算机的所有用户,但不可应用于管理员。有了这一例外,管理员可以保留对计算机的无限制访问权和控制权,并且还可以限制可登录该计算机的用户。

将本地策略应用于除管理员以外的所有用户
要对除管理员以外的所有用户实施本地策略,请执行以下步骤:
以管理员身份登录到计算机。
打开本地安全策略。要实现这一点,请执行以下xx作之一:


单击开始,然后单击运行,键入 gpedit.msc,然后按 ENTER 键。

- 或 -
单击开始,单击运行,键入 mmc,按 ENTER 键,添加“组策略对象编辑器”,然后为本地安全策略对其进行配置。
如果删除运行 命令是您所需要的策略之一,Microsoft 建议您通过“Microsoft 管理控制台”(MMC) 编辑该策略,然后将结果保存为图标。这样,您不需要使用运行 命令就可以重新打开该策略了。
展开用户配置 对象,然后展开管理模板 对象。
启用您所需的任何策略(例如,“隐藏桌面上的‘网上邻居’”或“隐藏桌面上的
Internet Explorer 图标”)。

备注:一定要选择正确的策略,否则,您可能会限制管理员登录计算机(以及完成配置
计算机所需步骤)的能力。Microsoft 建议您记录所做的任何更改(在第 10 步中也使用此信息)。
关闭“Gpedit.msc 组策略”管理单元,或者,如果您使用 MMC,请将控制台保存为图标,以便以后可以访问它,然后从计算机注销。
以管理员身份登录到计算机。

您可以在此登录会话中验证以前所做的策略更改,因为在默认情况下,本地策略会应用于包括管理员在内的所有用户。
从计算机注销,然后以此计算机所有其他用户(您希望他们应用这些策略)的身份登录到计算机。这些策略是为所有这些用户和管理员而实现的。

备注:对于在这一步未登录到计算机的任何用户帐户,都无法为其实现这些策略。
以管理员身份登录到计算机。
单击开始,指向控制面板,然后单击文件夹选项。单击查看 选项卡,单击“显示隐藏文件或文件夹”,然后单击确定 以便可以查看“组策略”隐藏文件夹。或者,打开“Windows 资源管理器”,单击工具,然后单击文件夹选项 以查看这些设置。
将位于 %Systemroot%\System32\GroupPolicy\User 文件夹中的 Registry.pol 文件复
制到备份位置(例如,复制到另一硬盘、软盘或文件夹)。
使用“Gpedit.msc 组策略”管理单元或您的 MMC 图标再次打开本地策略,然后启用在为该计算机创建的原始策略中禁用的实际功能。

备注:执行此xx作时,“策略编辑器”会创建一个新的 Registry.pol 文件。
关闭策略编辑器,然后将在第 10 步创建的备份 Registry.pol 文件复制回
%Systemroot%\System32\GroupPolicy\User 文件夹中。

系统提示替换现有文件时,单击是。
从计算机注销,然后以管理员身份登录。

由于您是以管理员身份登录到计算机,您可以验证是否没有实施最初所做的更改。 从计算机注销,然后以其他用户身份登录。

由于您是以用户(而非管理员)身份登录到计算机,您可以验证是否实施了最初所做的更改。
以管理员身份登录计算机,以确认本地策略不影响您以本地管理员身份登录该计算机。

恢复原始本地策略
要撤消本文中“将本地策略应用于除管理员以外的所有用户”一节介绍的过程,请执行以下步骤:
以管理员身份登录到计算机。
单击开始,指向控制面板,然后单击文件夹选项。单击查看 选项卡,单击“显示隐藏文件和文件夹”,然后单击确定 以便可以查看“组策略”隐藏文件夹。或者,打开“Windows 资源管理器”,单击工具,然后单击文件夹选项。
从 %Systemroot%\System32\GroupPolicy\User 文件夹中移动、重命名或删除
Registry.pol 文件。

在您从计算机注销或重新启动计算机后,“Windows 文件保护”系统会创建另一个默认的 Registry.pol 文件。
打开本地策略。要实现这一点,请单击开始,单击运行,然后键入 gpedit.msc。或者,单击开始,单击运行,键入 mmc,然后加载本地安全策略。然后,将设为禁用 或启用的所有项目设为未配置 ,以撤消 Registry.pol 文件所指定的对 Windows Server
2003 注册表实施的任何策略更改。
以管理员身份从计算机注销,然后再次以管理员身份登录该计算机。
从计算机注销,然后以本地计算机的所有用户身份登录到该计算机,这样也可以针对它
们的帐户撤消更改

概要
如果您在“本地连接”属性中显示的此连接使用下列项目列表中单击 Internet 协议(TCP/IP) 项,您将发现卸载按钮不可用(被禁用)。这是因为传输控制协议/Internet协议 (TCP/IP) 堆栈是 Microsoft Windows Server 2003 的核心组件,不能删除。

在有些情况下,可能需要重新安装 TCP/IP 以使 TCP/IP 堆栈恢复为原始状态。可以使用 NetShell 实用程序重置 TCP/IP 堆栈,使其恢复到初次安装xx作系统时的状态。
更多信息
NetShell 实用程序 (netsh) 是一个命令行脚本编写工具,您可以使用此实用程序配置 并监视 Windows Server 2003 联网。此工具提供了交互式网络外壳程序接口。

您可以使用该实用程序的 Internet 协议 (IP) 上下文中的 reset 命令重写以下与
TCP/IP 相关的注册表项:
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\
SYSTEM\CurrentControlSet\Services\DHCP\Parameters\
运行此命令的结果与删除并重新安装 TCP/IP 协议的效果相同。
命令语法
netsh int ip reset [log_file_name]

要使用netsh 命令重置 TCP/IP 堆栈,您必须指定记录命令结果的日志文件的名称。如果输入了本文“命令示例”一节中介绍的任一命令,当前计算机中的 TCP/IP 堆栈将被重置,且该xx作的活动将被记录到命令行中指定的 Resetlog.txt 文件。在第一个示例中,日志文件被创建在当前文件夹中;在第二个示例中,则指定了 Resetlog.txt 日志
文件的完整路径。

备注:如果该文件的名称与目标文件夹中的现有日志文件的名称相同,则会将新日志文件的信息附加到现有文件的结尾处。
命令示例
下面的示例说明了如何使用netsh 命令重置 TCP/IP 协议堆栈。
示例 1
单击开始,然后单击运行。
在打开框中键入 cmd,然后单击确定。
在命令提示符后键入以下命令,然后按 ENTER 键:
netsh int ip reset resetlog.txt

备注:在上面的命令中,“int”是 interface 命令的缩写形式。
键入 exit,然后按 ENTER 键。
示例 2
单击开始,然后单击运行。
在打开框中键入 cmd,然后单击确定。
在命令提示符后键入以下命令,然后按 ENTER 键:
netsh int ip reset c:\resetlog.txt

键入 exit,然后按 ENTER 键。
要查看有关命令的帮助,请键入空格,然后键入 ?。即会显示有关netsh 命令子上下文中可用命令的其他帮助。例如,要查看上一节中介绍的netsh 命令,应在命令提示符后
键入以下命令:
键入 netsh ?,然后按 ENTER 键。
键入 netsh int ?,然后按 ENTER 键。
键入 netsh int ip ?,然后按 ENTER 键。
键入 netsh int ip reset ?,然后按 ENTER 键。
NETSH INT IP RESET 的日志文件示例
以下本文是一个日志文件的示例,该日志文件是由运行ip reset 命令后的netsh 生成的 。根据发出命令的计算机上不同的配置,实际的日志文件也会有所不同。通常,如果没有替换 TCP/IP 注册表项的原始配置,则不会在文件中记录任何xx作。 reset
SYSTEM\CurrentControlSet\Services\Dhcp\Parameters\Options\15\RegLocation
old REG_MULTI_SZ =

SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\?\DhcpDomain

SYSTEM\CurrentControlSet\Services\TcpIp\Parameters\DhcpDomain

added
SYSTEM\CurrentControlSet\Services\Netbt\Parameters\Interfaces\Tcpip_{2DDD011E -B1B6-4886-87AC-B4E72693D10C}\NetbiosOptions
added
SYSTEM\CurrentControlSet\Services\Netbt\Parameters\Interfaces\Tcpip_{BAA9D128
-54BB-43F6-8922-313D537BE03E}\NetbiosOptions
reset
SYSTEM\CurrentControlSet\Services\Netbt\Parameters\Interfaces\Tcpip_{BD2859BA
-B26A-4E2B-A3FE-3D246F90A81A}\NameServerList
old REG_MULTI_SZ =
10.1.1.2

deleted SYSTEM\CurrentControlSet\Services\Netbt\Parameters\EnableLmhosts
added
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{2DDD011E-B1B6-4886-87AC-B4E72693D10C}\AddressType
added
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{2DDD011E-B1B6-4886-87AC-B4E72693D10C}\DefaultGatewayMetric
added
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{2DDD011E-B1B6-4886-87AC-B4E72693D10C}\DisableDynamicUpdate
deleted
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{2DDD011E-B1B6-4886-87AC-B4E72693D10C}\DontAddDefaultGateway
reset
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{2DDD011E-B1B6-4886-87AC-B4E72693D10C}\EnableDhcp
old REG_DWORD = 0

added
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{2DDD011E-B1B6-4886-87AC-B4E72693D10C}\NameServer
added
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{2DDD011E-B1B6-4886-87AC-B4E72693D10C}\RawIpAllowedProtocols
added
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{2DDD011E-B1B6-4886-87AC-B4E72693D10C}\TcpAllowedPorts
added
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{2DDD011E-B1B6-4886-87AC-B4E72693D10C}\UdpAllowedPorts
added
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{5B3675C3-6EB9-
4936-B991-04DA31024C4E}\DisableDynamicUpdate
reset
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{5B3675C3-6EB9-
4936-B991-04DA31024C4E}\EnableDhcp
old REG_DWORD = 0

reset
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{5B3675C3-6EB9-
4936-B991-04DA31024C4E}\IpAddress
old REG_MULTI_SZ =
12.12.12.12

deleted
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{5B3675C3-6EB9-
4936-B991-04DA31024C4E}\IpAutoconfigurationAddress
deleted
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{5B3675C3-6EB9-
4936-B991-04DA31024C4E}\IpAutoconfigurationMask
deleted
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{5B3675C3-6EB9-
4936-B991-04DA31024C4E}\IpAutoconfigurationSeed
reset
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{5B3675C3-6EB9-
4936-B991-04DA31024C4E}\RawIpAllowedProtocols
old REG_MULTI_SZ =
0

reset
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{5B3675C3-6EB9-
4936-B991-04DA31024C4E}\SubnetMask
old REG_MULTI_SZ =
255.255.255.0

reset
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{5B3675C3-6EB9-
4936-B991-04DA31024C4E}\TcpAllowedPorts
old REG_MULTI_SZ = 0

reset
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{5B3675C3-6EB9-
4936-B991-04DA31024C4E}\UdpAllowedPorts
old REG_MULTI_SZ = 0

added
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BAA9D128-54BB-43F6-8922-313D537BE03E}\AddressType
added
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BAA9D128-54BB-43F6-8922-313D537BE03E}\DefaultGatewayMetric
added
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BAA9D128-54BB-43F6-8922-313D537BE03E}\DisableDynamicUpdate
deleted
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BAA9D128-54BB-43F6-8922-313D537BE03E}\DontAddDefaultGateway
reset
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BAA9D128-54BB-43F6-8922-313D537BE03E}\EnableDhcp
old REG_DWORD = 0

added
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BAA9D128-54BB-43F6-8922-313D537BE03E}\NameServer
added
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BAA9D128-54BB-43F6-8922-313D537BE03E}\RawIpAllowedProtocols
added
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BAA9D128-54BB-43F6-8922-313D537BE03E}\TcpAllowedPorts
added
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BAA9D128-54BB-43F6-8922-313D537BE03E}\UdpAllowedPorts
reset
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BD2859BA-B26A-4E2B-A3FE-3D246F90A81A}\DefaultGateway
old REG_MULTI_SZ =
10.1.1.2


reset
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BD2859BA-B26A-4E2B-A3FE-3D246F90A81A}\DefaultGatewayMetric
old REG_MULTI_SZ =
0


added
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BD2859BA-B26A-4E2B-A3FE-3D246F90A81A}\DisableDynamicUpdate
reset
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BD2859BA-B26A-4E2B-A3FE-3D246F90A81A}\EnableDhcp
old REG_DWORD = 0

reset
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BD2859BA-B26A-4E2B-A3FE-3D246F90A81A}\IpAddress
old REG_MULTI_SZ =
10.1.1.1


deleted
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BD2859BA-B26A-4E2B-A3FE-3D246F90A81A}\IpAutoconfigurationAddress
deleted
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BD2859BA-B26A-4E2B-A3FE-3D246F90A81A}\IpAutoconfigurationMask
deleted
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BD2859BA-B26A-4E2B-A3FE-3D246F90A81A}\IpAutoconfigurationSeed
reset
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BD2859BA-B26A-4E2B-A3FE-3D246F90A81A}\NameServer
old REG_SZ = 10.1.1.2,10.1.1.3

reset
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BD2859BA-B26A-4E2B-A3FE-3D246F90A81A}\RawIpAllowedProtocols
old REG_MULTI_SZ =
0

reset
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BD2859BA-B26A-4E2B-A3FE-3D246F90A81A}\SubnetMask
old REG_MULTI_SZ =
255.255.255.0


reset
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BD2859BA-B26A-4E2B-A3FE-3D246F90A81A}\TcpAllowedPortsold REG_MULTI_SZ =
0

reset
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{BD2859BA-B26A-4E2B-A3FE-3D246F90A81A}\UdpAllowedPortsold REG_MULTI_SZ =0

deleted
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DontAddDefaultGatewayDefault
deleted
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\EnableIcmpRedirect deleted
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\EnableSecurityFilters
deleted SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\SearchList deleted
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\UseDomainNameDevolution

概要
本文介绍了如何在运行 Sysprep 实用程序 (Sysprep.exe) 时添加自定义的用户设置。

运行 Sysprep.exe 时行┯没柚梦薹ū徊痘竦?.reg 文件中并在安装程序完成时应用,而且也无法为这些设置编写脚本并将它们应用于所有新用户。要解决此问题,请在运行 Sysprep.exe 之前将自定义的用户设置复制到“Default User”配置文件。

要执行本节所描述的步骤,您的系统必须满足以下条件:
Windows Server 2003 要完整地安装到您的计算机上并能正常运行。
该算机不是某个域的一部分。
所有用户程序均已预先安装,并且可以正常运行。
备注:如果客户机的桌面设置存储在用户的配置文件中,您可以使用本节中介绍的过程来自定义这些设置的任何方面。例如,您可以使用此过程为所有用户配置“自动隐藏任务栏”选项和“在‘开始’菜单中显示小图标”选项。您无法使用此过程自定义存储在用户配置文件之外的设置。

使用以下过程为所有新用户部署自定义的电源选项设置。

使用管理员权限创建测试用户
以本地管理员身份登录到计算机。
单击开始,右键单击我的电脑,然后单击管理。

备注:如果安装了 Active Directory,就会禁用“计算机管理”控制台中的“本地用户和组”工具。如果您要从装有 Active Directory 的域控制器计算机中执行此过程,就必须通过“Active Directory 用户和计算机”新建用户帐户。
单击“本地用户和组”,右键单击用户,然后单击新建用户。
在“用户名”框中键入 Testuser,键入密码,单击“用户下次登录时须更改密码”复选框,将其清除,然后单击创建。
关闭新建用户 对话框。
在“本地用户和组”中,单击组,双击管理员,然后单击添加。
键入 Testuser,然后单击确定。
单击确定 ,关闭管理员属性 对话框。
关闭“计算机管理”控制台。


为测试用户创建自定义设置
以 Testuser 的身份登录计算机。
单击开始,指向控制面板,然后单击电源选项。
设置要用作所有用户的默认设置的监视器、硬盘、待机和休眠 等选项的设置。备注:您可以根据需要进行其他自定义。这些特定设置只是一个例子

将测试用户的配置文件文件夹复制到默认的用户配置文件文件夹
注销 Testuser 帐户,然后以管理员身份再次登录。
右键单击开始,然后单击资源管理器 ,启动“Windows 资源管理器”。
在工具 菜单上,单击文件夹选项,然后单击视图 选项卡。
在高级设置 框中,单击“显示隐藏文件和文件夹”复选框,将其选中。
退出“Windows 资源管理器”。
右键单击我的电脑,然后单击属性。
单击高级 选项卡,然后在用户配置文件 部分,单击设置。
单击Testuser 帐户,然后单击复制到。
在路径 框中键入 c:\documents and settings\default user,或者单击浏览 ,找到“
默认的用户文件夹”。
在“允许使用”部分,单击更改。
键入 Everyone,然后单击确定。
在复制到 对话框中单击确定 ,然后单击是 ,确认该xx作。
单击确定 ,关闭用户配置文件 对话框。
右键单击我的电脑,然后单击管理。
单击“本地用户和组”,单击用户,单击Testuser 帐户,然后将其删除。
关闭“计算机管理”控制台。
准备就绪后启动 Sysprep 进程。

概要
默认情况下,在基于 Windows XP 和 Windows Server 2003 的系统上,对传入的远程访问服务 (RAS) 或虚拟专用网 (VPN) 连接启用 Netbios 代理。此设置允许 RAS 客户端在其所连接的局域网 (LAN) 中解析 Netbios 名称。在被配置为 RAS 或 VPN 服务器的计算机上,如果从命令外壳程序中运行 Ipconfig /all 命令,将返回信息显示WINSProxy Enabled 值设置为 Yes。在某些情况下,可能需要禁用此设置。
更多信息在启用传入的连接设置后,EnableProxy 值设置为 2。

备注:EnableProxy 值位于以下注册表位置:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Netbt\Parameters\EnableP roxy

要在 RAS 或 VPN 服务器上禁用 Netbios 代理,请按照以下步骤xx作。

警告:“注册表编辑器”使用不当可造成严重问题,这些问题可能需要重新安装xx作系注册表编辑器”需要您自担风险。

启动“注册表编辑器”(Regedit.exe)。
找到并单击下面的注册表项:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Remoteaccess\Parameters\ Ip\EnableNebtBcastFwd

将EnableNebtBcastFwd 值更改为 0。
退出“注册表编辑器”。
重新启动计算机。

概要
本分步指南介绍了如何在 Windows Server 2003 环境中设置一个用于匿名访问的 WWW
服务器。

安装 Internet 信息服务
Microsoft Internet 信息服务 (IIS) 是与 Windows Server 2003 集成的 Web 服务。

要安装 IIS、添加可选组件或删除可选组件,请按以下步骤xx作:
单击开始,指向控制面板,然后单击“添加或删除程序”。

“添加或删除程序”工具就会启动。
单击添加/删除 Windows 组件。

显示“Windows 组件向导”。
在Windows 组件 列表中,单击Web 应用程序服务器。
单击详细信息,然后单击Internet 信息服务 (IIS)。
单击详细信息 ,以查看 IIS 可选组件列表。
选择您要安装的可选组件。默认情况下,下列组件是选中的:
公用文件
FrontPage 2002 Server Extentions
Internet 信息服务管理单元
Internet 信息服务管理器
NNTP 服务
SMTP 服务
World Wide Web 服务

单击“World Wide Web 服务”,然后单击详细信息 ,以查看 IIS 可选子组件(如Active Server Pages 组件和“远程管理 (HTML) 工具”)的列表。选择您要安装的可选子组件。默认情况下,下列组件是选中的:
World Wide Web 服务

单击确定 ,直到返回“Windows 组件向导”。
单击下一步,然后完成“Windows 组件向导”。


配置匿名身份验证
要配置匿名身份验证,请按以下步骤xx作:
单击开始,指向管理工具,然后单击Internet 信息服务 (IIS)。
展开“* 服务器名称”(其中服务器名称 为该服务器的名称),右键单击Web 站点,然后单击属性。
在Web 站点属性 对话框中,单击目录安全性 选项卡。
在“身份验证和访问控制”下,单击编辑。
单击“启用匿名访问”复选框,将其选中。

备注:“用户名”框中的用户帐户只用于通过 Windows guest 帐户进行匿名访问。

默认情况下,服务器会创建并使用帐户 IUSR_computername。匿名用户帐户密码仅在Windows 中使用;匿名用户不使用用户名和密码登录。
在“已验证身份的访问”下,单击“集成的 Windows 身份验证”复选框,将其选中。
单击确定 两次。


基本 Web 站点配置
单击开始,指向管理工具,然后单击Internet 信息服务 (IIS)。
展开“* 服务器名称”(其中服务器名称 为该服务器的名称),然后展开Web 站点。
右键单击默认 Web 站点,然后单击属性。
单击Web 站点 选项卡。如果您已为计算机分配了多个 IP 地址,则请在IP 地址 框中单击您要指定给此 Web 站点的 IP 地址。
单击性能 选项卡。使用Web 站点属性 - 性能 对话框可设置影响内存、带宽使用和Web 连接数量的属性。

通过配置某个特定站点上的网络带宽,您可以更好地控制该站点的通信量。例如,通过在低优先级的 Web 站点上限制带宽,您可以放宽对他站点的访问量的限制。同样,当您指定到某个 Web 站点的连接数量时,您就可以为其他站点释放资源。设置是站点专用的,应根据网络通信量和使用变化情况进行调整。
单击“限制可用于此 Web 站点的带宽”复选框,将其选中,可配置 IIS 将网络带宽调节到选定的最大带宽量,以千字节每秒 (KB/S) 为单位。
单击Web 服务连接 复选框,将其选中,可选择特定数目或者不限定数目的 Web 服务连接。限制连接可使计算机资源能够用于其他进程。

备注:每个浏览 Web 站点的客户机通常都使用大约三个连接。
单击主目录 选项卡。
如果您想使用存储在本地计算机上的 Web 内容,则单击“此计算机上的目录”然后在本地路径 框中键入您想要的路径。例如,默认路径为 C:\Inetpub\wwwroot。

备注:为了增加安全性,请不要在根目录下创建 Web 内容文件夹。
如果要使用存储在另一台计算机上的 Web 内容,则单击“另一计算机上的共享位置”,然后在显示的网络目录 框中键入所需位置。
如果您要使用存储在另一个 Web 地址的 Web 内容,则单击“重定向到 URL”,然后在“重定向到”框中键入所需位置。在“客户会送到”下,单击相应的复选框,将其选中。

概要
本分步指南介绍了如何配置基于 Windows Server 2003 的服务器,以便当计算机资源不足时通知您。Windows Server 2003 中的程序从对象、计数器和实例三个方面来定义它收集的性能数据。性能对象是可以测量的任何资源、程序或服务。您可以使用“系统监视器”和性能日志以及警报来选择性能对象、计数器和实例,以便收集和显示系统组件或安装的软件的性能数据。

您可以在计数器上设置警报,这样,当选定计数器的值超过或低于指定设置时就可以发送消息,启动程序或启动日志。


如何向系统监视器中添加计数器
单击开始,指向管理工具,然后单击性能。 如果您选择远程计算机上的对象,当“系统监视器”刷新列表以反映计算机中的现有对象时,可能会有短暂的延迟。
右键单击“系统监视器”的“详细信息”窗格,然后单击 添加计数器。
要监视正在运行监视控制台的任何计算机,请单击“使用本地计算机计数器”。或者,如果要监视某一特定计算机而不管监视控制台在哪里运行,单击“从计算机选择计数器”,然后指定计算机名称。
在“性能对象”下,单击要监视的对象。默认情况下选中的是处理器 对象。
单击所有计数器 ,或者单击从列表中选择计数器,然后单击某一个列表项。
单击添加。

如何定义计数器和警报阈值
单击开始,指向管理工具,然后单击性能。
双击“性能日志和警报”,然后单击警报。
右键单击警报,单击新建警报设置,为该警报键入一个名称,然后单击确定。
单击常规 选项卡,为该警报键入一个描述性注释,然后单击添加。
对于要添加到日志中的每个计数器或计数器组,执行下列步骤:
要从运行“性能日志和警报”服务的计算机上监视计数器,请单击“使用本地计算机计数器”。

或者,要从某台特定的计算机监视计数器,而不管该服务在哪里运行,请单击“从计算机选择计数器”,然后指定您要监视的计算机的名称。
在“性能对象”下面,选择要监视的对象。
然后选择一个或多个要监视的计数器。
要监视选定计数器的所有实例,请单击所有实例。 注意,二进制日志可以包含那些在日志启动时不可用但随后变得可用的实例。或者,要监视选定计数器的特定实例,请单击“从列表选择实例”,然后单击一个或多个要监视的实例。
单击添加,然后单击关闭。
在将出发警报,如果值是框中,单击小于 或大于。在限制为 框中,指定触发警报的值。
在“数据采样间隔”框中,指定更新间隔的数值和计量单位。
单击xx作 选项卡,确定当触发警报时引发的xx作。
要在“事件查看器”日志中记录警报,请单击“将项记入应用程序事件日志”复选框,将其选中。
要将警报消息发往计算机,请单击“发送网络信息到”复选框,将其选中,然后键入希望接收该警报信息的计算机的名称。
单击“启动性能数据日志”复选框,将其选中,以启动日志文件。
如果您希望在达到警报条件时启动程序,单击“执行这个程序”。您可以直接键入程序的路径或者单击浏览 来手动选择您要使用的程序。
单击计划 选项卡,然后配置适当的设置,以便手动或在计划的时间开始或停止日志记录。


如何选择要监视的数据
开始按下列顺序监视如下组件的活动:
内存
处理器
磁盘
网络
下面列表显示了建议用于服务器监视的最少的计数器。注意,当您检查特定资源时,应该包括相关性能对象的其他计数器。
组件:磁盘
正被监视的性能方面:用法
要监视的计数器:
物理磁盘\ Disk Reads/sec(磁盘读取/秒)
物理磁盘\ Disk Writes/sec(磁盘写入/秒)
逻辑磁盘\ % Free Space(可用空间)
您必须仔细解读 % Disk Time(磁盘时间)计数器。由于该计数器的 _Total 实例可能没有准确反映多磁盘计算机上的使用情况,因此,同时使用 % Idle Time(空闲时间)
计数器是很重要的。请注意,这些计数器无法显示超过 100% 的值。


组件:磁盘
正被监视的性能方面:瓶颈
要监视的计数器:物理磁盘\ Avg.Disk Queue Length(磁盘队列平均长度)(所有实例)
组件:内存
正被监视的性能方面:用法
要监视的计数器:
内存\ Available Bytes(可用字节)
内存\ Cache Bytes(缓存字节)
组件:内存
正被监视的性能方面:瓶颈或漏洞
要监视的计数器:
内存\ Pages/sec(页面/秒)
内存\ Page Reads/sec(页面读取/秒)
内存\ Transition Faults/sec(传输错误/秒)
内存\ Pool Paged Bytes(分页的内存池字节)
内存\ Pool Nonpaged Bytes(未分页的内存池字节)
下列组件尽管不是专门的内存对象计数器,但它们对于内存分析很有用:


分页文件\ % Usage(用法)对象(所有实例)
缓存\ Data Map Hits(数据映射命中)%
服务器\ Pool Paged Bytes(分页的内存池字节)
服务器\ Pool Nonpaged Bytes(未分页的内存池字节)
组件:网络
正被监视的性能方面:吞吐量
要监视的计数器:
协议传输计数器(因网络协议而异);对于 TCP/IP 而言,包括:
网络接口\ Bytes total/sec(总字节数/秒)
网络接口\ Packets/sec(包/秒)
服务器\ Bytes Total/sec(总字节数/秒)或 服务器\ Bytes Transmitted/sec(发送
的字节数/秒)
服务器\ Bytes Received/sec(接收的字节数/秒)
您可能需要像“监视网络活动”部分介绍的那样来监视其他对象的网络和服务器吞吐量


组件:处理器
正被监视的性能方面:用法
要监视的计数器:处理器\ % Processor Time(处理器时间)(所有实例)
组件:处理器
正被监视的性能方面:瓶颈
要监视的计数器:
系统\ Processor Queue Length(处理器队列长度)(所有实例)
处理器\ Interrupts/sec(中断/秒)
系统\ Context switches/sec(上下文切换/秒)

posted @ 2006-03-31 13:47 高山流水 阅读(543) | 评论 (0)编辑 收藏

仅列出标题
共30页: First 6 7 8 9 10 11 12 13 14 Last