Aqui te dejo una función que he creado para tí (y para mi... bueeeno, para todos).
Como es mi costumbre, lo habré hecho del modo más rebuscado, pero es el único que he encontrado:
Código vb:
Ver originalPrivate Function RevisaServicio(NombreServicio As String, Optional Asegurar_0off_1on As Integer = -1) As String
Dim TempDir As String
Dim FileTemp As String
Dim NumFichero As Integer
Dim Linea As String
Dim LineaBAK As String
Dim Encontrado As Integer
TempDir = Environ("temp")
If Right$(TempDir, 1) <> "\" Then TempDir = TempDir & "\"
FileTemp = TempDir & "servicios.txt"
Shell "cmd /c sc query state= all > " & FileTemp, vbHide
DoEvents
NumFichero = FreeFile
ResumeAbrir:
On Local Error GoTo ErrorAbrir
Open FileTemp For Input As #NumFichero
Do Until EOF(NumFichero)
Line Input #NumFichero, Linea
If Trim$(Mid$(UCase$(Linea), 14)) = UCase$(NombreServicio) Then
Line Input #NumFichero, Linea
Line Input #NumFichero, Linea
Encontrado = 1
Exit Do
End If
LineaBAK = Linea
Loop
Close NumFichero
Kill FileTemp
If Encontrado = 0 Then
RevisaServicio = "El servicio no existe"
Exit Function
End If
If Asegurar_0off_1on = 1 Then
If InStr(1, Linea, "STOPPED") Then
RevisaServicio = "El servicio se ha re-activado"
Shell "sc start " & Mid$(LineaBAK, 14)
Else
RevisaServicio = "El servicio estaba activo"
End If
ElseIf Asegurar_0off_1on = 0 Then
If InStr(1, Linea, "RUNNING") Then
RevisaServicio = "El servicio se ha detenido"
Shell "sc stop " & Mid$(LineaBAK, 14)
Else
RevisaServicio = "El servicio estaba detenido"
End If
Else
If InStr(1, Linea, "RUNNING") Then
RevisaServicio = "El servicio está activo"
Else
RevisaServicio = "El servicio está detenido"
End If
End If
Exit Function
ErrorAbrir:
If Err.Number = 53 Or Err.Number = 70 Then
Err.Clear
DoEvents
Resume ResumeAbrir
Else
MsgBox Err.Description
End If
End Function
Esta función comprueba el estado de un servicio (al menos en XP) y muestra si está activo o no.
Tambien puedes forzarlo a que se active si no lo está o que se desactive si está activo.
Ejm:
Mostrar estado:
MsgBox RevisaServicio("Servicio de Estado ASP.NET")
Asegurar activo
MsgBox RevisaServicio("Servicio de Estado ASP.NET", 1)
o
RevisaServicio "Servicio de Estado ASP.NET", 1
Asegurar detenido
MsgBox RevisaServicio("Servicio de Estado ASP.NET", 0)
o
RevisaServicio "Servicio de Estado ASP.NET", 0