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