Dos nombres diferentes para los servicios de Windows (VB6)

Tengo un problema menor al automatizar el inicio y la detención de los servicios. cuando abro services.msc y mira la lista de servicios, todos tienen nombres. Sin embargo, cuando ejecuto este código:

Dim objService As Object
Dim objSet As Object
IsServiceRunning = False
Set objSet = GetObject("winmgmts:").ExecQuery("SELECT * FROM Win32_Service")
For Each objService In objSet
    If (UCase(strServiceName) = UCase(objService.Name)) And (UCase(objService.State) = UCase("Running")) Then
        IsServiceRunning = True
    End If
Next

La objService.Name el valor no es el mismo que el nombre en la lista. Por ejemplo, "Navegador de computadora" es simplemente "navegador", "Sistema de archivos distribuidos" es "dfs" e "Inicio de sesión de red" es "netlogon". ¿Hay alguna manera de extraer el nombre completo y más largo de estos servicios de este objeto objService? Puedo solucionar esto, pero en aras de la claridad en el código, prefiero usar el mismo valor para determinar si el servicio se está ejecutando, haciendo una NET START or NET STOP llamada de línea de comando y registro.

preguntado el 12 de junio de 12 a las 18:06

Esto parece un problema de WMI en lugar de algo específico de un lenguaje de programación o de servicios. Tenga en cuenta que WMI se basa en una gran cantidad de piratería "por conjetura y por Dios" a través del registro y demás, y no siempre agrega todo lo que desea. Probablemente pueda hacer todo lo que necesita a través de llamadas a la API, incluso alejándose de las ejecuciones de NET START y NET STOP. -

Como referencia, puede ver ambos nombres en la ventana de propiedades del servicio. Service name es el nombre interno utilizado por Windows y el SCM, y Display name es el nombre fácil de usar que muestra. -

1 Respuestas

Sólo tiene que utilizar objService.Caption para acceder al "nombre largo" del servicio.

Descubrí el nombre de la propiedad así:

For Each objService In objSet
    For Each vElem In objService.Properties_
        Debug.Print vElem.Name; "=";
        Debug.Print vElem.Value
    Next
    Exit For
    ...
Next

Sólo hay que poner objService en la ventana del reloj para averiguar Properties_ propiedad. Poner vElem en la ventana del reloj también para encontrar Name y la propiedad por defecto Value (además IsArray, etc) de SWbemProperty objeto.

Respondido el 13 de junio de 12 a las 13:06

Y gracias por el consejo sobre cómo encontrar propiedades también. Eso podría ser extremadamente útil. - Joe M

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.