思路话语

。Arlen:思想有多远你就能走多远...

相同程序注册多份windows服务的终级解决方案

1.相同程序注册多份windows服务的终级解决方案:
sc命令:
C:\Documents and Settings\arlenliu>sc create AdsService2 binpath= "D:\AdsSchedul
eService\Tencent.Itil.Config.ADS.AdsScheduleService.exe" type= share start= auto
 displayname= "AdsService2"
想注册多少份就多少份:
C:\Documents and Settings\arlenliu>sc create AdsServiceN binpath= "D:\AdsSchedul
eService\Tencent.Itil.Config.ADS.AdsScheduleService.exe" type= share start= auto
 displayname= "AdsServiceN"

必须注意,各参数与值之间有一个空格:
type=[空格]share

注:如果以上带参数的方式建立的服务无法启动,如果出现1083错误的话,就不要带参数:
C:\Documents and Settings\arlenliu>sc create AdsServiceC binpath= "E:\AdsService
\Tencent.Itil.Config.ADS.AdsScheduleService.exe"

2.创建了服务,你如果都启动以后,你会发现,在你的windows任务管理器中会出现多个相同名称的进程。
如果其中一个服务有一天出了问题,或者需要更新dll,而在services.msc中又无法停掉(经常这样),而你不得不到windows任务管理器中来强行结束进程的时候,你就麻烦大了,这么多相同名称的进程,该结束哪一个呢?
针对这个,我也想到了一个解决办法:
将你的那些放在不同地方的服务的exe文件的名称改一下,然后创建服务,在启动服务后就是不同的进程名了!
如:可以将一些Tencent.Itil.Config.ADS.AdsScheduleService.exe
改成Tencent.Itil.Config.ADS.AdsScheduleServiceFor目的1.exe,Tencent.Itil.Config.ADS.AdsScheduleServiceFor目的2.exe....

非常完美!

3.需要这么做的理由:
之所以这么做也是有原因的。ADS(自己开发的自动发现系统)调用了一个公用调度程序,该程序只支持多个任务在单线程中串行,而我们的任务都是要持续进行的,串行必定出问题。不能多线程,那就多进程吧。于是找到以上这个终极解决方案。

4.
附删除服务的命令:
sc delete AdsService2

posted on 2009-09-20 11:03  Arlen  阅读(382)  评论(0)    收藏  举报

导航