C#Windows服务

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,它只是结束.....

新的Windows服务代码:

    protected override void OnStart(string[] args)
    {
        ProcessMonitor pm = new ProcessMonitor();
        Console.ReadLine();
    }
Run Code Online (Sandbox Code Playgroud)

思考

由于功能完全封装在这个单独的类中(它完全开始,设置一些事件和等待) - 我怎样才能让服务真正坐在那里等待?它似乎忽略了readline.然而,这完全可以作为控制台应用程序使用,将它作为服务更方便.

Cha*_*ion 5

通常你会想要这样的东西.正如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)

  • processMonitor.Start()需要返回; OnStart成功启动约30秒. (2认同)