我有一个tophelf
windows服务,我想做一些检查(即如果一个xml文件存在),如果检查失败,我需要
Windows服务停止.
所以我尝试在Start()方法中进行检查,然后引发异常:
- public void Start()
- {
- if (!File.Exists(_xmlFile) throw new FileNotFoundException();
- // Do some work here if xml file exists.
- }
但是,Windows服务作为异常之后的进程保持不变,然后我必须在任务管理器中手动杀死.
如果某些条件(即找不到文件)成立,是否有办法运行该服务?
解决方法
我已经“借用”了tophelf的功能设置的示例代码来说明一点:
- HostFactory.Run(x => //1
- {
- x.Service<TownCrier>(s => //2
- {
- s.ConstructUsing(name=> new TownCrier()); //3
- s.WhenStarted(tc => tc.Start()); //4
- s.WhenStopped(tc => tc.Stop()); //5
- });
- x.RunAsLocalSystem(); //6
- x.SetDescription("Sample Topshelf Host"); //7
- x.SetDisplayName("Stuff"); //8
- x.SetServiceName("stuff"); //9
- });
在上述代码运行之前,您将不得不放置文件系统检查.让我们再想一下吧.服务的一个重点就是确保它能够运行RUNS和KEEPS.您试图颠覆首先提供服务应用程序的基本原则.而不是试图停止服务,因为丢失的文件,找出一些方式来提醒你的支持人员,而不是做任何取决于那个丢失的文件.