#49: Leggere lo stato di un servizio con VB.NET

Supponiamo di avere un’applicazione inserita nel menu “Esecuzione automatica” e che tale applicazione abbia la necessità di accedere automaticamente a un database collegato a un’istanza di SQL Server 2008 Express locale.

Nel caso in cui il computer sia appena stato acceso, potrebbe verificarsi un ritardo di avvio del servizio di SQL SERVER e quindi potremmo ottenere un errore di connessione dalla nostra applicazione.

Dobbiamo quindi verificare che il servizio MSSQL$SQLEXPRESS sia già stato avviato, così da permettere alla nostra applicazione di restare in attesa o, addirittura, di avviare il servizio prima di procedere alle operazioni programmate.

Per verificare che il servizio sia stato avviato, possiamo utilizzare il seguente frammento di codice che include sia la direttiva di importazione dell’opportuno namespace, sia il codice del metodo che legge lo stato del servizio, sia il codice del metodo principale che testa il metodo di lettura dello stato.

Imports System.ServiceProcess

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles Button1.Click
        Dim nomeServizio As String = "MSSQL$SQLEXPRESS"
        Dim risposta As Boolean = StatoServizio(nomeServizio)
        MessageBox.Show("Servizio " & nomeServizio & " = " & risposta)
    End Sub
    Private Function StatoServizio(ByVal nomeServizio As String) As Boolean
        Dim risultato As Boolean = False

        Dim mySCMs() As ServiceController
        mySCMs = ServiceController.GetServices()

        Dim mySCMTemp As ServiceController

        For Each mySCMTemp In mySCMs
            If mySCMTemp.ServiceName = nomeServizio Then
                If mySCMTemp.Status = ServiceControllerStatus.Running Then
                    risultato = True
                Else
                    risultato = False
                End If
                mySCMTemp.Close()
                Exit For
            End If
        Next
        Return risultato
    End Function
End Class

Naturalmente è sufficiente cambiare il nome del servizio da verificare per avere la possibilità di conoscere lo stato (“Avviato” oppure no) di qualsasi servizio installato.

Il significato dei valori della proprietà ‘Status‘ sono i seguenti:

1 – Stopped = Il servizio non è in esecuzione

2 – StartPending = Il servizio si sta avviando

3 – StopPending = Il servizio si sta fermando

4 – Running = Il servizio è in esecuzione

5 – ContinuePending = Il servizio si sta riavviando

6 – PausePending = Il servizio si sta ponendo in pausa

7 – Paused = Il servizio è in pausa


Annunci

Pubblicato il 7 gennaio 2009 su Novità. Aggiungi ai preferiti il collegamento . Lascia un commento.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: