none
COMO INICIAR UN SERVICIO DE WINDOWS DESDE UNA PC REMOTA RRS feed

  • Pregunta

  • Muy buenos días tengas uds amigos del foro, acudo a uds por que tengo un problema que necesito resolver.

    Mi problema es el siguiente, tengo varias maquinas conectadas en red a un servidor donde se aloja la base de datos (mariadb), por vaya a saber que motivo, el servicio de la base de datos se detuvo, esto genero un problema en el local comercial como se imaginaran ya que no podían usar el sistema por este error. Hasta que me informaron del problema y pude ver que se trataba del servicio de la bd (detenido) pasaron como 40 min. Si bien hice varias pruebas después deteniendo la base manualmente y reiniciando el servidor el problema se soluciono, (pd: el servidor no tiene pantalla,ni teclado ni mouse ya que permanece encendido todo el tiempo), mi idea es de no reiniciar el servidor y de poder iniciar el servicio automáticamente por programación.

    Ciertamente esto lo logre con el siguiente codigo:

     Private Sub Test_Estado_Servicio()
            Dim NombreServicio As String = "Mysql"
            Dim Service As ServiceController = New ServiceController(NombreServicio)
            Try
                If Service.Status = ServiceControllerStatus.Running Then
                    MessageBox.Show("Este Servicio Se Encuentra Iniciado.", "Test Estado Del Servicio", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End If
                If Service.Status = ServiceControllerStatus.Stopped Then
                    Try
                        If MessageBox.Show("El Servicio De La BD Se Encuentra Detenido." & vbCrLf & "Desea Iniciar El Servicio En Este Momento?.", "Test Estado Del Servicio", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) = DialogResult.OK Then
                            Service.Start()
                            MessageBox.Show("El Servicio Se A Iniciado Correctamente.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information)
                        End If
                    Catch ex As Exception
                        MessageBox.Show(ex.Message, "Error")
                    End Try
                End If
            Catch ex As Exception
            End Try
        End Sub

    Este proceso me funciona pero en la maquina local, lo que yo necesito que este proceso se pueda hacer de cualquier maquina y lo active en el servidor de la bd, ya que un usuario sin conocimientos técnicos lo pueda hacer con un solo click, sin tener que reiniciar el servidor.

    Espero haber sido claro en la explicación de mi problema. Desde ya muchísimas gracias por su tiempo amigos del foro.

      

     

     

    lunes, 18 de febrero de 2019 11:20

Respuestas

  • El ServiceController admite un par'ametro adicional que es el nombre de maquina:

     Dim Service As ServiceController = New ServiceController(NombreServicio, NombreDelServidor)

    De esta manera puedes controlar los servicios en otra maquina. Todo el resto del codigo que tienes es igual.

    PERO: OJO, para que esto funcione es necesario que el usuario bejo cuyas credenciales se esta ejecutando ese codigo tenga suficientes permisos en la otra maquina para poder iniciar el servicio. Tambien hace falta que la comunicacion entre ambas maquinas no este bloqueada por un cortafuegos que impida esa conexion.

    • Propuesto como respuesta Pedro AlfaroModerator lunes, 18 de febrero de 2019 20:58
    • Marcado como respuesta dj mac40 miércoles, 20 de febrero de 2019 12:13
    lunes, 18 de febrero de 2019 13:21
  • Bueno, la solucion de "fuerza bruta" es simplemente agregar el usuario llamante al grupo de Administradores locales del servidor en el que se ejecuta el servicio. Puedes hacer esto provisionalmente para hacer la prueba y comprobar que funciona, y luego ya investigas que permisos minimos son necesarios para iniciar el servicio (dado que obviamente no es conveniente desde el punto de vista de la seguridad ejecutar la aplicacion con privilegios de administrador). La verdad es que asi a bote pronto no se que permisos son necesarios. Probablemente esto te lo sepan responder mejor en alguno de los foros de administracion de sistemas.
    • Propuesto como respuesta Pedro AlfaroModerator martes, 19 de febrero de 2019 15:36
    • Marcado como respuesta dj mac40 miércoles, 20 de febrero de 2019 12:13
    martes, 19 de febrero de 2019 12:07

Todas las respuestas

  • El ServiceController admite un par'ametro adicional que es el nombre de maquina:

     Dim Service As ServiceController = New ServiceController(NombreServicio, NombreDelServidor)

    De esta manera puedes controlar los servicios en otra maquina. Todo el resto del codigo que tienes es igual.

    PERO: OJO, para que esto funcione es necesario que el usuario bejo cuyas credenciales se esta ejecutando ese codigo tenga suficientes permisos en la otra maquina para poder iniciar el servicio. Tambien hace falta que la comunicacion entre ambas maquinas no este bloqueada por un cortafuegos que impida esa conexion.

    • Propuesto como respuesta Pedro AlfaroModerator lunes, 18 de febrero de 2019 20:58
    • Marcado como respuesta dj mac40 miércoles, 20 de febrero de 2019 12:13
    lunes, 18 de febrero de 2019 13:21
  • Muy buenos dias tengas tu amigo Alberto, muchisimas gracias por reposnder a mi pregunta.

    Probe modificando el codigo como me indicaste:

    Dim NombreServicio As String = "Mysql"
    Dim NombreEquipo As String = "SERVIDOR"
    Dim Service As ServiceController = New ServiceController(NombreServicio, NombreEquipo)

    Y parece que voy por buen camino, por que al ejecutar el programa me lanza el siguiente error:

    Información adicional: No se puede abrir el Administrador de control de servicios en el equipo 'SERVIDOR'. Puede que se requieran otros privilegios para realizar la operación.

    Que es exactamente como tu me dijiste, parece que necesito persmisos especiales en el servidor para ejecutar la accion, ahora bien y sin animo de abusar de tu tiempo amigo Alberto, me podrias explicar como hago para dar esos privilegios al servidor?.

    Desde ya muchisimas gracias por tu tiempo, y espero tu pronta respuesta.

     

    martes, 19 de febrero de 2019 9:40
  • Bueno, la solucion de "fuerza bruta" es simplemente agregar el usuario llamante al grupo de Administradores locales del servidor en el que se ejecuta el servicio. Puedes hacer esto provisionalmente para hacer la prueba y comprobar que funciona, y luego ya investigas que permisos minimos son necesarios para iniciar el servicio (dado que obviamente no es conveniente desde el punto de vista de la seguridad ejecutar la aplicacion con privilegios de administrador). La verdad es que asi a bote pronto no se que permisos son necesarios. Probablemente esto te lo sepan responder mejor en alguno de los foros de administracion de sistemas.
    • Propuesto como respuesta Pedro AlfaroModerator martes, 19 de febrero de 2019 15:36
    • Marcado como respuesta dj mac40 miércoles, 20 de febrero de 2019 12:13
    martes, 19 de febrero de 2019 12:07
  • Muy Buenos Dias tengas tu Amigo Alberto.

    Si, ese fue unos de mis pensamientos el tema de la seguridad con los permisos que se deben dar al servidor, teniendo en cuenta como mencione en mi pregunta anterior, que es una maquina que esta funcionando 24hs y conectada a internet, pero bueno seguire investigando y probando a ver si se puede solucionar mi problema por completo de ser asi subire la solucion por si le sirve a alguien.

    Muchisimas Gracias Amigo Alberto por tu tiempo y me despido cordialmente de Ud.

    miércoles, 20 de febrero de 2019 12:20