Goo*_*ber 0 c# windows-services
我已经创建了一个Windows服务,但每当我启动它时,它立即停止.该服务来自一个控制台应用程序,该应用程序用于订阅事件并监视服务器上的进程.如果进程发生任何事情(即它被杀死),那么该事件将触发重新启动进程.我告诉你的原因是因为原来的代码看起来像这样:
static void Main(string[] args)
{
StartProcess sp = new StartProcess();
//Note the readline that means the application sits here waiting for an event!
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
现在这段代码已经变成了Windows服务,它基本上就是完全相同的.然而,服务并没有坐在那里等待,即使有readline,它只是结束.....
protected override void OnStart(string[] args)
{
ProcessMonitor pm = new ProcessMonitor();
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
由于功能完全封装在这个单独的类中(它完全开始,设置一些事件和等待) - 我怎样才能让服务真正坐在那里等待?它似乎忽略了readline.然而,这完全可以作为控制台应用程序使用,将它作为服务更方便.
通常你会想要这样的东西.正如Joe在评论中提到的那样,您希望Start初始化并将控制释放到另一个线程,以确保您在30秒内返回.
private readonly ProcessMonitor processMonitor = new ProcessMonitor();
protected override void OnStart(string[] args)
{
processMonitor.Start();
}
protected override void OnStop()
{
processMonitor.Stop();
}
Run Code Online (Sandbox Code Playgroud)