C#写一个Windows服务程序,启动多个service的问题

justforfun9912 2005-07-20 10:04:42
需求如下:我希望用C#写一个WINDOWS SERVICE程序,这个SERVICE程序里需要处理几种不同请求。
我的实现:添加一个Windows Service类型的类MainController,修改代码如下
static void Main()
{
System.ServiceProcess.ServiceBase[] ServicesToRun;

// Run all user Service in this process.
ServicesToRun = new System.ServiceProcess.ServiceBase[] {
new MainController(), // main service
new Service1 (),
new Service2 (),
new Service3 (),
};

System.ServiceProcess.ServiceBase.Run(ServicesToRun);
}

再向项目中添加Windows Service类型的类Service1, Service2, Service3。查看代码可以发现Service1,Service2,Service3大部分和MainController相同,但少了Main()方法。添加相应代码到Service1的OnStart()、OnStop()方法中,编译成功,然后安装运行该服务。但在查看服务输出时,发现MainController运行正常,但Service1,Service2,Service3都没有被自动启动,除非在他们的构造函数里,主动调用OnStart()。

请问,是不是我的用法有问题?请教如何实现我的需求?
...全文
695 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Seeko0 2005-07-20
  • 打赏
  • 举报
回复
Windows Service都需要注册,既然你已经注册了一个服务,你可以考虑使用多线程,再创建几个线程来进行实现你的其他Service
liujuanwh 2005-07-20
  • 打赏
  • 举报
回复
如果你想在一个Windows服务程序中同时启动多个服务,那么只要在Main()函数中定义多个ServiceBae类的子类的实例对象就可以了,方法就是创建一个ServiceBase类的数组对象,使得其中的每个对象对应于某个我们已预先定义好的服务。

{
System.ServiceProcess.ServiceBase[] MyServices;
MyServices = new System.ServiceProcess.ServiceBase[] { new Service1(), new Service2() };
System.ServiceProcess.ServiceBase.Run(MyServices);
}

justforfun9912 2005-07-20
  • 打赏
  • 举报
回复
感谢两位的回复。问题不是你们想的那样。而我原意是希望在Windows里只添加一个service,而在这个service里实现其他几个服务功能。

实际上,在一个Windows Service项目里添加多个Service类之后,可以添加对应的多个ServiceProcessInstaller,ServiceInstaller,以设定各个Service 的属性。这样,在项目编译成功之后,用installutil安装,可以发现在Windows系统服务里多了这几个service。这种情况下,OnStart(),OnStop()可以被‘自动’运行。

目前已不需要这种解决方案,改为多线程,运行良好。
pstop2001 2005-07-20
  • 打赏
  • 举报
回复
不太清楚你的意思!服务只要能启动不就行了?在服务里添加几个Servece类,需要做的操作都在类里实现,类里实现一个start方法。然后在OnStart方法里new那个类,start不行么?
liduke 2005-07-20
  • 打赏
  • 举报
回复
一切都同MainController试试,应该没问题

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧