Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Funciones para trabajar con servicios en vbs

Estas en el tema de Funciones para trabajar con servicios en vbs en el foro de Visual Basic clásico en Foros del Web. Buenos días, ¿alguien sabe como puedo comprobar el estado de un servicio windows (por ejemplo Servicio de Estado ASP.NET)? En el caso de que se ...
  #1 (permalink)  
Antiguo 18/01/2010, 01:50
 
Fecha de Ingreso: diciembre-2008
Mensajes: 122
Antigüedad: 15 años, 4 meses
Puntos: 0
Funciones para trabajar con servicios en vbs

Buenos días,
¿alguien sabe como puedo comprobar el estado de un servicio windows (por ejemplo Servicio de Estado ASP.NET)?

En el caso de que se compruebe que el servicio está parado, me gustaría iniciarlo desde el vbs.

¿Alguna idea?

Gracias
  #2 (permalink)  
Antiguo 18/01/2010, 05:25
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Funciones para trabajar con servicios en vbs

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 original
  1. Private Function RevisaServicio(NombreServicio As String, Optional Asegurar_0off_1on As Integer = -1) As String
  2.   Dim TempDir As String
  3.   Dim FileTemp As String
  4.   Dim NumFichero As Integer
  5.   Dim Linea As String
  6.   Dim LineaBAK As String
  7.   Dim Encontrado As Integer
  8.   TempDir = Environ("temp")
  9.   If Right$(TempDir, 1) <> "\" Then TempDir = TempDir & "\"
  10.   FileTemp = TempDir & "servicios.txt"
  11.   Shell "cmd /c sc query state= all > " & FileTemp, vbHide
  12.   DoEvents
  13.   NumFichero = FreeFile
  14. ResumeAbrir:
  15.   On Local Error GoTo ErrorAbrir
  16.   Open FileTemp For Input As #NumFichero
  17.   Do Until EOF(NumFichero)
  18.     Line Input #NumFichero, Linea
  19.     If Trim$(Mid$(UCase$(Linea), 14)) = UCase$(NombreServicio) Then
  20.       Line Input #NumFichero, Linea
  21.       Line Input #NumFichero, Linea
  22.       Encontrado = 1
  23.       Exit Do
  24.     End If
  25.     LineaBAK = Linea
  26.   Loop
  27.   Close NumFichero
  28.   Kill FileTemp
  29.   If Encontrado = 0 Then
  30.     RevisaServicio = "El servicio no existe"
  31.     Exit Function
  32.   End If
  33.   If Asegurar_0off_1on = 1 Then
  34.     If InStr(1, Linea, "STOPPED") Then
  35.       RevisaServicio = "El servicio se ha re-activado"
  36.       Shell "sc start " & Mid$(LineaBAK, 14)
  37.     Else
  38.       RevisaServicio = "El servicio estaba activo"
  39.     End If
  40.   ElseIf Asegurar_0off_1on = 0 Then
  41.     If InStr(1, Linea, "RUNNING") Then
  42.       RevisaServicio = "El servicio se ha detenido"
  43.       Shell "sc stop " & Mid$(LineaBAK, 14)
  44.     Else
  45.       RevisaServicio = "El servicio estaba detenido"
  46.     End If
  47.   Else
  48.     If InStr(1, Linea, "RUNNING") Then
  49.       RevisaServicio = "El servicio está activo"
  50.     Else
  51.       RevisaServicio = "El servicio está detenido"
  52.     End If
  53.   End If
  54.  
  55. Exit Function
  56.  
  57. ErrorAbrir:
  58.   If Err.Number = 53 Or Err.Number = 70 Then
  59.     Err.Clear
  60.     DoEvents
  61.     Resume ResumeAbrir
  62.   Else
  63.     MsgBox Err.Description
  64.   End If
  65. 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
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Última edición por pkj; 18/01/2010 a las 05:32 Razón: Mejorar
  #3 (permalink)  
Antiguo 19/01/2010, 06:28
 
Fecha de Ingreso: diciembre-2008
Mensajes: 122
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Funciones para trabajar con servicios en vbs

Muchas gracias,
Buena currada
  #4 (permalink)  
Antiguo 20/01/2010, 01:45
 
Fecha de Ingreso: diciembre-2008
Mensajes: 122
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Funciones para trabajar con servicios en vbs

Por cierto hay alguna manera de levantar procesos con wshShell.Run??

Gracias
  #5 (permalink)  
Antiguo 21/01/2010, 10:09
 
Fecha de Ingreso: diciembre-2008
Mensajes: 122
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Funciones para trabajar con servicios en vbs

¿Alguna idea?
  #6 (permalink)  
Antiguo 21/01/2010, 15:39
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Funciones para trabajar con servicios en vbs

Creo que wshShell.Run hace lo mismo que Shell. Nada que ver con los servicios. Aunque siempre me puedo equivocar.

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #7 (permalink)  
Antiguo 26/01/2010, 05:20
 
Fecha de Ingreso: diciembre-2008
Mensajes: 122
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Funciones para trabajar con servicios en vbs

Ya tengo un script que me parece correcto:

Parto de la situación en que el servicio mqsvc esta parado (Service Message Queuing).
Ejecuto este script pero no lo inicia.


'Start Service
strServiceName = "mqsvc.exe"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonat e}!\\.\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery ("Select * from Win32_Service Where Name ='" & strServiceName & "'")
For Each objService in colListOfServices
msgbox objService
objService.StartService()
Next



¿Alguien sabe por qué?

Además si escribo un msgbox en el bucle, no lo muestra.

Gracias
  #8 (permalink)  
Antiguo 26/01/2010, 10:46
 
Fecha de Ingreso: diciembre-2008
Mensajes: 122
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Funciones para trabajar con servicios en vbs

¿Alguien a probado el script o ha visto porque no hace la tarea?
La verdad que no da error y se ejecuta hasta el final pero no entra en el bucle con cualquier servicio que añada y este parado.

Gracias.
  #9 (permalink)  
Antiguo 26/01/2010, 18:49
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Funciones para trabajar con servicios en vbs

El servicio tiene que existir y el código funciona si quitas el ".exe"

strServiceName = "mqsvc"

además me sobraban los paréntesis de
objService.StartService

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Etiquetas: funciones, servicios, vbs, trabajo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:31.