3 votes

Statut du contrôleur de service / Interrogation

J'ai un problème avec une application administrative sur laquelle je travaille. Je suis en train de construire une interface pour arrêter, démarrer et interroger divers services sur une quarantaine de serveurs.

Je consulte le fichier service.controller et j'ai réussi à arrêter et à démarrer divers services à l'aide d'événements liés à des boutons, mais j'essaie maintenant de trouver un moyen de renvoyer l'état du service dans une zone de texte et de demander l'état du service toutes les 10 secondes environ et j'ai l'impression de me heurter à un mur de briques.

Quelqu'un a-t-il des conseils ou des idées ?

Merci !

4voto

Dan R Points 1852

Vous pouvez déclencher le contrôle de service périodique en utilisant un objet Timer. Vous pouvez exécuter vos requêtes de service sur l'événement Elapsed.

    private void t_Elapsed(object sender, ElapsedEventArgs e)
    {
        // Check service statuses
    }

Pour ce qui est de l'affichage des statuts dans une zone de texte, vous devriez pouvoir utiliser la méthode ToString() sur le statut du service et l'afficher dans une zone de texte normale. N'oubliez pas que vous pouvez être ou non sur le thread de l'interface graphique lorsque vous réagissez aux événements de la minuterie, vous devrez donc vous invoquer sur le thread principal.

    private delegate void TextUpdateHandler(string updatedText);

    private void UpdateServerStatuses(string statuses)
    {
        if (this.InvokeRequired)
        {
            TextUpdateHandler update = new TextUpdateHandler(this.UpdateServerStatuses);
            this.BeginInvoke(update, statuses);
        }
        else
        {
            // load textbox here
        }
    }

2voto

Evolved Points 221

Peut-être que tu ne veux pas faire de sondage :

Private serviceController As ServiceController = Nothing 
Private serviceControllerStatusRunning = False

Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    Try
        serviceController = New ServiceController("NameOfTheTheServiceYouWant")
        If serviceController.Status = ServiceControllerStatus.Stopped Then
            ' put code for stopped status here
        Else
            ' put code for running status here
        End If
        BackgroundWorker1.RunWorkerAsync()
    Catch ex As Exception
        MessageBox.Show("error:" + ex.Message)
        serviceController = Nothing
        Me.Close()
        Exit Sub
    End Try
End Sub

Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    If serviceControllerStatusRunning Then
        serviceController.WaitForStatus(ServiceControllerStatus.Stopped)
        serviceControllerStatusRunning = False
    Else
        serviceController.WaitForStatus(ServiceControllerStatus.Running)
        serviceControllerStatusRunning = True
    End If
End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(sender As System.Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
     if serviceControllerStatusRunning then
       ' put code for running status here
     else
       ' put code for stopped status here
     end if
     BackgroundWorker1.RunWorkerAsync() ' start worker thread again
End Sub

Cheers Evolved

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X