首页 | 手机版 | 三国演义 | 三国志 | 史将 | 背景 | 藏书阁
首页 -> 精彩文章 -> Windows XP服务详解

Windows XP服务详解

作者youngxp 标签服务 阅读次数:125
编者按:2003年第18和19两期刊出Windows XP服务连载文章后,收到了不少读者朋友的来信反馈,我们也想能否让这个内容更具实用性,这里针对连载文章中缺少的如何添加/删除服务的内容,作一些有益的补充,希望大家喜欢。    对于个人用户来说,WinNT/2000/XP系列系统的服务最大的意义其实是在于多用户环境下的应用。比如说在多个用户公用的机器上,某个用户想让某个程序在自己登录启动系统时自动运行,但又不影响别人的启动项目。添加到启动组显然是不合适的,因为会影响到其他用户的启动,也易被别人删除。对WinXP用户来说,可以试试把这个程序添加为一个服务。只要你设置好权限,只有自己才可更改服务,就不用担心上述问题了。    所以,服务实际上是一种多用户环境上机器资源有效的管理办法,即使对于完全单人使用计算机的环境也是非常有意义,因为你可在机器上设定多个用户帐号来分别对应平时的“工作环境”、“游戏环境”等,这样不同的用户帐号登录就可以对应不同的启动项目环境。同样基于这种原因,很多软件安装后会自动在系统服务里面添加自己的服务,尤其是杀毒软件,如KV系列、Kaspersky、McAfee、诺顿、熊猫卫士等,这些软件在安装时就自动安装了系统服务,但卸载就不是那么容易了,很多时候软件卸载了,但服务项还在系统服务列表保留,还常引起异常,诺顿甚至还专门推出了对应的专用软件卸载程序,但毕竟不是通用的解决办法。    那么,除WinXP默认安装的服务外,我们如何把应用程序添加为服务呢?又如何将不需要的服务从系统服务中删除呢?有两个方法可以做到,分别是手动添加修改法和自动添加修改法。   一、手动添加修改法  手动将应用程序添加为服务,首先需要两个小软件Instsrv.exe和Srvany.exe。这两个软件都是命令行工具,所以大部分添加修改工作依然需要自己手动完成。其中Instsrv.exe可以给系统安装和删除服务,而Srvany.exe则可以让程序以服务方式运行。这两个软件都包含在Windows NT Resource Kit里,也可以到网上下载(http://postboy.myetang.com/files/srvany.exe,http://postboy.myetang.com/files/instsrv.exe)。然后把这两个程序保存在一个易记忆处理的位置,例如说放在D盘根目录下。下面举例说明如何把程序FoxMail作为一个服务添加进WinXP Pro操作系统中,并把这个服务命名为“FoxMail”。    1.选择“开始”→“运行”,在对话框中输入“CMD”并回车打开命令行窗口,在提示符后面直接输入“d:\\instsrv.exe FoxMail d:\\srvany.exe”然后回车,意思是在系统中添加一个名为FoxMail的服务,其中的“d:\\instsrv.exe”和“d:\\srvany.exe”表示这两个程序保存的位置,而FoxMail则是你想添加的服务名称(图14)。    2.在上述运行对话框中输入“Regedit”回车打开注册表编辑器,在HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services下,找到刚才添加的FoxMail,点击鼠标右键,新建一个键,命名为“Parameters”(图1)。    3.继续鼠标右键点击新建的Parameters,并再次新建一个名称为“Application”的子键,数据类型为“REG_SZ”,数值为希望作为服务运行的程序的所在位置,本例中FoxMail程序安装在D盘下,即程序位置是“D:\\FoxMail\\Foxmail.exe”,那么把这个路径添入数值中(图2)。    4.现在这个服务已成功添加并设置好了。如果你希望做得更加完善,可继续在注册表的FoxMail服务下建立一个名为Description的子键,数据类型同样为REG_SZ,数值可以写一些对这个服务的描述,这样在服务管理工具中就可以看到了(图3)。    5.最后我们需要对服务做一些必要的设置,在运行中输入“Services.msc”并回车打开服务管理配置,在列表中找到我们刚添加的FoxMail服务,双击打开。在“General”选项卡上需要设置该服务的运行方式,按照需要设置或一般设置成自动就可以了。而在“Logon”选项卡下可设置以什么用户登录系统时运行这个服务,这里是设置多用户不同启动环境的关键了,按照具体需要设置即可(图4)。其他“Recovery”选项卡和 “Dependencies”选项卡等设置对于一般用户没有什么意义,不用去刻意设置它。经过这些设置后,服务就可以按照我们希望的方式和环境下正常启动工作了。这时在任务管理器里,用户名为“SYSTEM”的FoxMail进程就是我们添加的服务(图5)。    如果以后不想再运行这个服务,可直接禁止它在启动时运行,或者使用Instsrv.exe程序删除。方法是在命令行下输入“d:\\instsrv.exe FoxMail remove”,然后回车。同样可用这个命令将系统中其他不想要的服务卸载。   二、自动添加法  相对于第一种方法的繁琐不方便,微软显然有所察觉,所以也发布了一个专用的系统服务添加和删除工具srvinstw.exe,较之上面两个工具来说功能更强大,不光可以应用在本地机器上,更可以将其应用在远程机器上。而且这是个图形界面的程序,其具体设置是步进式的,所以非常简单和方便(下载参考:http://nanhua.html.533.net/tools/srvinstw.rar)。下面我们仍然把程序FoxMail作为一个服务添加进本地机器的WinXP Pro操作系统中,并把这个服务命名为“FoxMail”。    1.启动srvinstw.exe,选择“install a service”进入下一步(图6)。  2.选择“Local Machine”继续(图7),在下一步中为即将安装的服务取一个名字,这里输入“FoxMail”并继续。  4.这一步选择将哪个应用程序安装为服务,在输入框内输入应用程序的路径或点击旁边的“browse”按钮在文件目录中选择(图8)。  5.选择服务的类型,软件通常选择“service is its own procees”即可,而如果是硬件驱动和文件系统驱动,选择相应的选项即可(图9)。  6.接着是设定服务的权限,如果只希望服务为某个用户启动,选择“other account”并输入相应的用户名和密码(图10)。  7.然后设定服务的启动类型,选“Automatic”(自动)即可,然后进入下一步,点“完成”即可将服务安装在系统内了,不用再做其他手动工作(图11)。    要用srvinstw.exe删除一个服务更是方便简单,只需启动srvinstw.exe选择“Remove a service”,在下一步中选择“Local Machine”继续,然后在服务名称下拉框中选择要卸载的服务(图12),最后点击“完成”确认删除掉要卸载的服务即可。 DIY Windows系统服务(修订) 对于经常重装系统的朋友来说,出于优化系统、减少内存占用亦或增强系统安全性能,往往都会修改很多系统服务的启动类型。将大量无用或者危险的服务关闭,参照许多服务优化的文章来看,大多需要禁用并停止20-30个服务,那将是一项比较烦琐的工作,我也是深受其害。然而从Windows XP开始,其自带的DOS工具中加入了一个sc.exe(Service Control)的文件,恰好可以对服务的启动类型以及服务的启动或者关闭等进行进行操作,再利用DOS的批处理优势,就可以把上面提到的种种操作进行大幅简化。 sc.exe常用功能列表: 1.更改服务的启动状态(这是比较有用的一个功能) 2.删除服务(除非对自己电脑的软、硬件所需的服务比较清楚,否则不建议删除任何系统服务,特别是基础服务) 3.停止或启动服务(功能上类似于net stop/start,但速度更快且能停止的服务更多) 具体的命令格式如下: 修改服务启动类型的命令行格式为(特别注意start=后面有一个空格) sc config 服务名称 start= demand(设置服务为手动启动) sc config 服务名称 start= disabled(设置服务为禁用) 停止/启动服务的命令行格式为 sc stop/start 服务名称 注意:平时常接触的都是服务的显示名称,而以上所指是服务名称,都可以在控制面板->管理工具->服务里面,双击对应的服务来查询。 先举例说明一下具体的设置方法: 如设置远程注册表服务为手动其格式为 sc config RemoteRegistry start= demand 设为禁用的格式为: sc config RemoteRegistry start= disabled 停止服务则格式为: sc stop RemoteRegistry 首先把自己所需设置的服务名称查到之后,按照上面的格式做成批处理文件,重装系统之后只要运行批处理文件即可。 以下是我的设置,以XPSp2为蓝本,可比对所用的系统进行增删和修改。注:未加入XPSP2的自动更新、安全中心、防火墙。 sc config Alerter start= demand sc config TrkWks start= demand sc config helpsvc start= demand sc config PolicyAgent start= demand sc config dmserver start= demand sc config WmdmPmSn start= demand sc config Spooler start= demand sc config RemoteRegistry start= demand sc config NtmsSvc start= demand sc config seclogon start= demand sc config Schedule start= demand sc config WebClient start= demand sc config W32Time start= demand sc config WZCSVC start= demand sc config ERSvc start= demand sc config Themes start= demand sc config FastUserSwitchingCompatibility start= disabled sc config Messenger start= disabled sc config ProtectedStorage start= disabled sc config SSDPSRV start= disabled sc config TermService start= disabled sc config ShellHWDetection start= disabled 如果需要立即关闭服务也可把以下代码跟在上面的代码之后 sc stop W32Time sc stop ShellHWDetection sc stop TrkWks sc stop helpsvc sc stop dmserver sc stop PolicyAgent sc stop Spooler sc stop RemoteRegistry sc stop seclogon sc stop Schedule sc stop WZCSVC sc stop ERSvc sc stop Themes sc stop FastUserSwitchingCompatibility sc stop ProtectedStorage sc stop SSDPSRV sc stop WebClient 最后把修改好之后的代码存为services.cmd,在以后进行服务设置时,直接运行事先保存好的批处理文件就可以做到事半功倍了。 看到这里,使用Win2000的朋友也不必失望,sc.exe这个命令行工具对Win2000同样适用,可从装有WinXP或者Win2003的机器里面拷贝sc.exe文件,与保存好的批处理文件放在一起,然后执行批处理文件即可。 对注册表比较熟悉的朋友可能会想到用注册表来设置服务的启动类型,这也是一种可行的方法,本身却有着内在不足。原因是服务启动类型在注册表中对应的键值较长且分散,进行整理不方便直观且易错漏,所以这种方法比较适用于无人值守的安装时使用。 下面是我对服务进行设置时遇到的问题和技巧,仅供参考。 1.对于系统服务而言,既然存在就有它存在的意义。所以在开始之前最好先了解一下机器使用的软件和硬件所必须的系统服务,再进行后续操作。比如说办公一族经常使用打印机,那么打印机安装、运行必备服务的延迟打印服务(Spooler)就不能改动其启动类型或者将其停止。喜欢XP视觉样式的朋友,主题服务(Themes)也是不能去改动的……由于系统服务众多,这里就逐一列出了,可以参看大众软件2004年18、19期GZ写的《用我所用弃我所弃——WindowsXp服务详解》(针对XPSP1,但由于SP2的服务并无太大的改动,所以有着很强的参考价值)再加上平时的积累,相信一定能把你的服务设置好。 2.基础服务尽量不要去改动(主要指在服务属性里依存关系中显示“如果此服务失败,计算机将重启动,此服务不支持恢复操作”这类的服务,注意RPC服务也属于基础服务)。一方面是因为它们是底层的服务,另一方面是相当多的服务都依存于这些基础服务。 3.有的服务只能设置其启动类型,而不能通过sc stop来使之停止,所以两段代码所包含的服务不太相同。比如说TermService(终端服务)。将之设为禁用之后,重启一次后即变为停止了。 4.不能忽视服务间存在的依存关系,如果关闭了一个服务的父依存服务,那么这个服务和他的子依存服务也将不再起作用,最简单的例子是IIS服务依存于ProtectedStorage服务,如果该服务被改为手动特别是禁止之后,则IIS服务和依存于IIS的相关服务就相应的被禁用了。还有一些服务未标明依存关系,但是却缺一不可,比如说自动更新以及V5版的WindowsUpdate事实上不当依存于自动更新服务(wuauserv),还依存于智能后台传输服务(BITS)。所以把BITS服务禁用之后,WindowsUpdate也将出错。 方便大家查询,我把上面提到那篇文章《用我所用,弃我所弃——Windows XP服务详解》的链接附上。该文基于XPSP1,因为SP2并未加入太多重要的服务,所以该文仍有很大的参考价值,分上下两部分连载。比较长,我在这里就不贴了。 http://www.popsoft.com.cn/mag/asp/DispArticle.asp?ID=424 http://www.popsoft.com.cn/mag/asp/DispArticle.asp?ID=361 以下是原先在XPSP1时总结的一些服务调整注意事项,现在对SP2进行补充,希望对各位能有所帮助(写的比较早了,给出的多数是显示名称,服务名称自己查一下)。在这里还把微软官方的系统服务说明页的链接附上,以备查询。 http://www.microsoft.com/china/t ... dance/secmod54.mspx Cryptographic Services 提供三种管理服务: 编录数据库服务,它确定 Windows 文件的签字; 受保护的根服务,它从此计算机添加和删除受信根证书机构的证书;和密钥(Key)服务,它帮助注册此计算机获取证书。 最主要的体现是在安装驱动程序、DirectX等凡是需要验证数字签名时都必须开启这个东东。如果不开启将会导致这些程序不能正常安全的安装。但还可考虑系统属性中的硬件标签里的驱动程序签名里进行修改以使之失效,平时不进行驱动以及DirectX安装的时候,才可禁用,需要时再行开启。 Terminal Services 允许多位用户连接并控制一台机器,并且在远程计算机上显示桌面和应用程序。这是远程桌面(包括管理员的远程桌面)、快速用户转换、远程协助和终端服务器的基础结构。 这里需要说明一个问题,我们平时只要没有以上的应用就可以把它禁用,最明显的体现就是进入XP的速度可以大大加快(关于这点可以用全新安装的XP来实验)。比较明显的体现就在开启动界面的滚动条滚动次数大大减少(黑屏的时间不会变化,不会像有人提到的滚动时间少了,黑屏时间长了)。 比较有意思的是这个服务一旦禁用的话,在任务管理器的用户名栏里面将不会再显示用户名。其实我觉得无关紧要。 Protected Storage 提供对敏感数据(如私钥)的保护性存储,以便防止未授权的服务,过程或用户对其的非法访问。 这个服务也是说明不够具体,一般认为与密码记录有关。比较常见但于现在很多路由器的登录验证以及网页中各种输入密码的表单或窗口,设置为自动或者禁用都可以,千万不能设置为手动,否则就会出现不能登录路由器或者无法输入网页中的密码(具体表现就是出现了找到页面就是不弹出密码输入框,导致不能正常登录。只是普通网页登录的话主要是无法将光标定位于密码输入框中)。 相类似的表现也存在于Win2000下设该服务为手动后安装IE6Sp1,在重启后的升级过程中,进行系统服务安装时会相当缓慢(我的机器是赛扬4 1.8G可以用掉超过十分钟时间去等待安装完成)。 但是先将此服务禁用之后再行安装IIS的朋友就会发现IIS不能正常开启,因为这个服务是IIS的依赖服务,如果要用IIS的话,这个服务就只能设为自动,而不能将它禁用了。 如果不使用IIS、而且对密码输入不太多的使用者可以将此服务关闭以提高安全性。 Remote Access Connection Manager 创建网络连接。 在GZ的文章和微软的描述中都说这个服务是创建网络连接,依赖于Telephony这个服务,而GZ在论及Telephony时又提到只有不使用与拔号相关的服务时就可将之关闭,那么用局域网或路由器上网的又应该如何设置呢?有待验证! Windows Installer 这个服务的进程名是msiexec.exe,如果使用到微软Windows Installer制作的MSI文件的安装就会开启这个服务,GZ提到这个服务是手动启动,同时也必然是关闭着的,只有在使用的时候才会自行开启,而不是说这个服务就不工作了。现在很多软件都用的是这种安装文件格式,比如说ACDSee,VMWare,暴风影音、金山系列的部分软件等都在使用,它们的扩展名都是.exe的,只是安装过程中先解压为.msi再进行安装,实际直接使用.msi为扩展名发布的软件不多。所以最好不要去禁用,而让系统自行控制。但有时也会出现问题。比如说有时安装完软件后可以发现任务管理器的进程列表中有msiexec.exe的存在,但是不能用任务管理器将其中止,一般可以考虑重启或者直接到服务中将其停止即可。 Portable Media Serial Number Retrieves the serial number of any portable music player connected to your computer 这个服务不是太有用,但是将其关闭比较不方便,所以我认为可以将之设成禁用,而不必要将它停止,下次系统启动时会自行关闭这个服务,与Terminal Services服务相似,直接将之禁用即可。 Shell Hardware Detection(ShellHWDetection) 为自动播放硬件事件提供通知 这个服务在SP1的里面,启动类型为自动,而状态也是启动。当时由于没有太多的资料,也没有描述可以参考,所以一直以为是与某些硬件的检测有关,而到了 SP2之后,有了具体的描述。可以肯定这既不是硬件的检测程序,也不是我们平时使用的自动播放功能,故完全可以禁用之,因为这个服务支持的硬件到现在我也没见过。但是在nlite前期版本中,发现这个服务开始是在服务的移除范围之例,后来却被移到实验项目里边去了,可见其与某些硬件存在着依赖关系。所以如果发现自己的外设,如数码相机或者某些随身听(不是指一般的MP3)出现问题的话,请将此服务保持原状态。 Event Log(EventLog) 启用在事件查看器查看基于 Windows 的程序和组件颁发的事件日志消息。无法终止此服务。 由描述上看,再加上XP本身面向服务器的特性,可见这个服务是提供系统安全分析基础服务。但nlite里这个服务开始做为试验服务,后来又转为用红字注明的可移除服务。因为个人用户对安全性要求不高,所以很多nlite用户直接把这个服务给移掉了。出于两方面考虑,一是这个服务不要在系统安装之后用改注册表或者用命令行的方式移除,二是用nlite制作的时候去掉此服务,然后安装系统后未发现系统有相当长时间的启动延迟,就说明这个服务移除是安全的。做为试验的时候来移除此服务后,系统启动时间相当长,后来nlite的作者根据反映做了特定修改之后,这个服务的移除才变得安全。 综上,对此服务进行移除的情况,只适合于使用nlite进行系统安装,从不看日志且移除后无启动延迟的。 Logical Disk Manager 监测和监视新硬盘驱动器并向逻辑磁盘管理器管理服务发送卷的信息以便配置。如果此服务被终止,动态磁盘状态和配置信息会过时。如果此服务被禁用,任何依赖它的服务将无法启动。 这个服务平时设为手动即可,当使用到“管理工具-计算机管理-磁盘管理”时会自行启动,以使我们能对系统中的各个分区或者盘符进行管理,而在平时又可以不占用系统资源。但有时在安装虚拟光驱或者首次插入一个U盘时,经常会出现设备驱动加载正常,而在我的电脑里边看不到盘符的情况(经过试验在命令提示符下确实能打得开新的盘符)。遇到这个情况,不妨到“磁盘管理”属性页面里去手动设置一下盘符即可(有时可能还要重启一下)。 Computer Browser 在别的论坛上看到转贴回复时,提到该服务如果关闭,仅指该机不再参与Master Brower竞选。此时只要是局域网里有其他机器作为Master Brower,则仍可以获得Master Brower上的机器列表以正常的浏览网上邻居。希望有能力实验的朋友帮忙验证一下。 最后再补充一点,现在很多路由设备开始支持UPnP,而XP的ICS/ICF则自带UPnP的支持,很多BT下载工具现在已经开始支持这一协议,来进行自动端口映像,所以如果采用以上路由器以及Internet共享连接(相关软件没有进行尝试,比如WinRoute)上网的朋友,建议不要更改SSDP Discovery Service以及Universal Plug and Play Device Host这两个与UPnP密切相关的服务。还有几个服务在XPSP1里是默认开启的,但是到了SP2里面却变为禁用的服务,或者在2000里没有,而XP里新增的服务就要相当注意,因为对这些服务停止或者禁用的话,可能有优化的可能。毕竟架构相同,多出来的服务或许是可以关闭用以加快速度的,而那些SP2里面改变了启动类型的服务或许是用于提高安全性吧。特别注意XPSP2里增加了一个DComLaunch(DCOM Server Process Launcher)的服务,该服务与AppMgmt(Application Management)、MSIServer(Windows Installer)一起构成InstallShield安装程序的必需服务,也请不要更改这三个服务的默认启动类型,以避免用InstallShield进行封装的安装程序不能正常安装。 这篇文章适合于对服务及系统操作比较熟练的用户实践。初级用户可使用专门的服务修改软件(如系统服务终结者等相关软件)来进行设置。 结束篇:调整建议与手动恢复 最后,关于服务的调整,再给出一些建议。 1、不要通过msconfig来禁用某些服务,而是在“运行”对话框中输入“Services.msc”进入服务管理界面调整。 2、在禁用任何服务之前,先选择一个服务,然后查看所显示的该服务的相关信息,以免误操作。 3、根据你的设置,如果一个服务的启动类型被设置为手动,它就不会在系统启动后自动运行。如果你发现这样的做法使你感到不方便,完全可设置相关服务启动类型为自动。 4、在每次调整了你的服务设置后,最好重新启动一下电脑。 5、如果你系统中没有上文提到的某些服务,不用担心。因为某些服务只有在特定的状态下或者你安装了某些软硬件之后才会出现。 6、通过禁用次要的服务,可以比默认状态下节省约12~70MB的内存空间,但是这也取决于你的系统环境。 7、实际上,在上面的服务中,有36个是默认自动启动的,但最小的情况下只保留8个就能让WinXP正常运行。 最后,如果你不慎禁用了一个重要服务,导致Windows系统无法启动,因此你也无法重新启动相应的服务,这就造成了一个恶性循环。这种情况下我们只能使用控制台手动恢复,在控制台中可随意启动任何服务或控制服务的启动类型。将WinXP安装光盘放入光驱中,然后在BIOS中将光驱设为第一驱动器。启动电脑进入“欢迎使用安装程序”界面,按“R”进入WinXP的“故障恢复控制台”页面,系统会将电脑中的WinXP系统都列出来,选择需要修复的系统,并键入管理员密码。在这里我们要用的命令是“Enable”和“Disable”Enable命令的格式是“enable空格[service_name]空格[startup_type]”Disable命令的格式是“disable空格[service_name]”,其中[service_name]是希望启用/禁用的服务或设备名称,[startup_type]则是启动类型,表示了不同的启动类型,可用的类型有5种:SERVICE_DISABLED、SERVICE_BOOT_START、SERVICE_SYSTEM_START、SERVICE_AUTO_START和SERVICE_DEMAND_START。 下面我们将以在控制台中禁用Messenger服务为例子,先设置该服务的启动类型为禁用,然后又重新启动它。进入控制台中,先运行Listsvc查看各种系统服务的运行状态,在这里应该看见Messenger服务是启动的。输入“disable空格messengger”然后回车,这时Messenger服务已被禁用,但仍可通过Listsvc命令看到。如果要重新启动该服务并设置该服务随系统自动运行,则需要输入“enable空格messenger空格service_boot_start”然后回车。


浙ICP备06020153号-1