Process monitor service no Windows

0

Eu preciso de algo que seja executado em segundo plano como um serviço (Windows), observe o processo definido e quando ele ultrapassar os limites ele reinicia / interrompe / inicia o processo novamente? (funcionalidade semelhante de rubygem chamada " deus ")

Eu tenho um software de câmera de rede que é executado como um servidor, mas não suporta a execução como um serviço do Windows. Também pára de responder uma vez por dia. Quando isso acontece, posso ver que a memória cai abaixo de 10MB. Normalmente, é cerca de 20-30MB em RAM.

    
por Ahmed Al Hafoudh 04.11.2011 / 10:37

1 resposta

1

Se você estiver familiarizado com o C #, pode tentar usar um trabalhador em segundo plano para monitorar o processo e reiniciá-lo quando tiver problemas.

Por exemplo algo semelhante que eu tenho (para um aplicativo GUI) parece com o abaixo

private void startServer()
    {
        if (this.CancellationPending == true)
        {
            Console.WriteLine("Termination of {0} requested", thisServer.serverSettings.serverName);
            this.ReportProgress(100);
            this.Dispose(true);
        }
        else
        {
            try
            {
                thisServer.serverStatus = status.Starting;
                using (Process p = Process.Start(thisServer.serverStartInfo))
                {
                    thisServer.serverProc = p;
                    p.WaitForInputIdle(thisServer.serverSettings.startupDuration.Milliseconds);
                    thisServer.serverStatus = status.Running;

                    while (p.Responding)
                    {
                       // happy days
                    }

                    thisServer.serverStatus = status.Unknown;
                    try
                    {
                        p.Close();
                        thisServer.serverStatus = status.Offline;
                    }
                    catch 
                    {
                        try
                        {
                            p.Kill();
                            thisServer.serverStatus = status.Offline;
                        }
                        catch { }
                    }
                }

                reRun();
            }
            catch
            {
                thisServer.serverStatus = status.Offline;
                ReportProgress(100, "Error encountered when attempting to launch executable. Please review server settings.");
            }
        }
    }
    
por 04.11.2011 / 11:01