我有一个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.您试图颠覆首先提供服务应用程序的基本原则.而不是试图停止服务,因为丢失的文件,找出一些方式来提醒你的支持人员,而不是做任何取决于那个丢失的文件.