Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - Cómo detener servicio de Windows con Visual C# .Net
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Cómo detener servicio de Windows con Visual C# .Net

Publicar nuevo tema Responder al tema
Foros de discusión » VB.Net, C# .Net, Visual Studio .Net   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Cómo detener servicio de Windows con Visual C# .Net Responder citando

Estoy desarrollando una aplicación de Facturación y contabilidad para una empresa, estoy usando Microsoft Visual C# .Net de Visual Studio .Net 2010, he añadido una opción a la aplicación para que el usuario pueda hacer copia de seguridad de la BD PostgreSQL, lo que quiero hacer es detenener el servicio de PostgreSQL, copiar los ficheros de la bd y volver a iniciarlo ¿cómo detengo e inicio un servicio Windows con Visual C#?
MensajePublicado:
Dom Jul 29, 2012 6:42 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Cómo detener servicio de Windows con Visual C# .Net Responder citando



Anuncios



varios escribió:
Estoy desarrollando una aplicación de Facturación y contabilidad para una empresa, estoy usando Microsoft Visual C# .Net de Visual Studio .Net 2010, he añadido una opción a la aplicación para que el usuario pueda hacer copia de seguridad de la BD PostgreSQL, lo que quiero hacer es detenener el servicio de PostgreSQL, copiar los ficheros de la bd y volver a iniciarlo ¿cómo detengo e inicio un servicio Windows con Visual C#?


Para detener un servicio Windows con Visual C# puedes usar el siguiente código:

Código:

  ServiceController servicioWindows = new ServiceController("postgresql-9.0");
  try
  {
     if (servicioWindows != null &&
          servicioWindows.Status == ServiceControllerStatus.Running)
     {
       servicioWindows.Stop();
      }
      servicioWindows.WaitForStatus(ServiceControllerStatus.Stopped);
      servicioWindows.Close();
      MessageBox.Show("Servicio detenido correctamente");
    }
    catch (Exception ex)
    {
      MessageBox.Show ("Error al detener el servicio: " + ex.Message);               
    }


Para que el código anterior funcione tendrás que añadir el correspondiente using:

using System.ServiceProcess;

Y ten en cuenta también varias cosas:

1. Con el código C# anterior detendremos un servicio con el nombre "postgresql-9.0", obviamente deberás cambiar esto por el nombre del servicio, no la descripción sino el nombre corto.

2. Con el código C# anterior la aplicación no continuará hasta que se haya detenido el servicio o haya dado algún tipo de error al detenerse. Esto te será útil pues, como dices, no deberás iniciar la copia de ficheros hasta que el servicio se haya detenido completamente. Con "WaitForStatus", como te mostramos en el ejemplo C# conseguirás esto.

3. El código C# anterior, antes de detener el servicio, comprueba el estado actual y sólo intenta detenerlo si está en estado "running".
MensajePublicado:
Dom Jul 29, 2012 7:14 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Cómo detener servicio de Windows con Visual C# .Net Responder citando



Anuncios



Para iniciar el servicio el código sería:

Código:

  ServiceController servicioWindows =
      new ServiceController("postgresql-9.0");
   try
   {
      if (servicioWindows != null &&
          servicioWindows.Status != ServiceControllerStatus.Running)
      {
        servicioWindows.Start();
       }
       servicioWindows.WaitForStatus(ServiceControllerStatus.Running);
       servicioWindows.Close();
       MessageBox.Show("Servicio iniciado correctamente");
     }
     catch (Exception ex)
     {
       MessageBox.Show("Error al iniciar el servicio: " + ex.Message);
     }


Al igual que para detener el servicio, para iniciar el servicio con C# comprobamos primero que no esté inicado ya, si no lo está intentamos iniciarlo y no continuará el programa hasta que no esté iniciado o dé error.
MensajePublicado:
Dom Jul 29, 2012 7:20 pm
Top of PageVer perfil de usuario
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Re: Cómo detener servicio de Windows con Visual C# .Net Responder citando



Anuncios



Estoy ejecutando el código que me comentas pero aparece este error:

---------------------------
Facturación y contabilidad - Backup PostgreSQL
---------------------------
Error al iniciar el servicio: No se puede abrir el servicio postgresql-9.0 en el equipo '.'.
---------------------------
Aceptar
---------------------------


Utilizo PostgreSQL 9 y el servicio se llama "postgresql-9.0", esto lo he comprobado varias veces y es correcto ¿a qué puede ser debido este error?
MensajePublicado:
Dom Jul 29, 2012 7:22 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Cómo detener servicio de Windows con Visual C# .Net Responder citando



Anuncios



varios escribió:
Estoy ejecutando el código que me comentas pero aparece este error:

---------------------------
Facturación y contabilidad - Backup PostgreSQL
---------------------------
Error al iniciar el servicio: No se puede abrir el servicio postgresql-9.0 en el equipo '.'.
---------------------------
Aceptar
---------------------------


Utilizo PostgreSQL 9 y el servicio se llama "postgresql-9.0", esto lo he comprobado varias veces y es correcto ¿a qué puede ser debido este error?


Si usas Windows Vista, Windows 7 ó Windows 8 ten en cuenta que para estos procesos tendrás que ejecutar tu aplicación como administrador (pulsando con el botón derecho del ratón sobre el ejecutable y seleccionando "Ejecutar como administrador"), de lo contrario es posible que no tenga permisos para modificar el estado de un servicio. Esto ocurre si tienes el UAC (control de cuentas de usuario) activado o si el usuario que inicia la aplicación no tiene permisos suficientes.
MensajePublicado:
Dom Jul 29, 2012 7:55 pm
Top of PageVer perfil de usuario
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Re: Cómo detener servicio de Windows con Visual C# .Net Responder citando



Anuncios



alonsojpd escribió:
Si usas Windows Vista, Windows 7 ó Windows 8 ten en cuenta que para estos procesos tendrás que ejecutar tu aplicación como administrador (pulsando con el botón derecho del ratón sobre el ejecutable y seleccionando "Ejecutar como administrador"), de lo contrario es posible que no tenga permisos para modificar el estado de un servicio. Esto ocurre si tienes el UAC (control de cuentas de usuario) activado o si el usuario que inicia la aplicación no tiene permisos suficientes.


Efectivamente, he generado el ejecutable de la aplicación, lo he ejecutado como administrador y ahora sí me inicia y detiene el servicio.

Pero ahora me surge otra duda, sería muy molesto que el usuario tuviera que ejecutar toda la aplicación de Facturación y Contabilidad como administrador cada vez que la abra ¿hay alguna forma de que sólo pida iniciarse como administrador al ejecutar la copia de seguridad y no al ejecutar la aplicación completa?
MensajePublicado:
Dom Jul 29, 2012 7:58 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Cómo detener servicio de Windows con Visual C# .Net Responder citando



Anuncios



varios escribió:
Efectivamente, he generado el ejecutable de la aplicación, lo he ejecutado como administrador y ahora sí me inicia y detiene el servicio.

Pero ahora me surge otra duda, sería muy molesto que el usuario tuviera que ejecutar toda la aplicación de Facturación y Contabilidad como administrador cada vez que la abra ¿hay alguna forma de que sólo pida iniciarse como administrador al ejecutar la copia de seguridad y no al ejecutar la aplicación completa?


Existen varios métodos para solucionar esto. Nosotros te recomendamos que la parte de la copia de seguridad la hagas en una segunda aplicación independiente de la de Facturación y Contabilidad. Y en la de facturación y contabilidad, en el menú o botón o donde quieras, ejecutes esta segunda aplicación de backup en modo administrador, sería con el siguiente código C#:

Código:

  ProcessStartInfo aplicacionWindows =
      new System.Diagnostics.ProcessStartInfo();
  aplicacionWindows.FileName = "backup_postgresql.exe";
  aplicacionWindows.Verb = "runas";
  Process process = new Process();
  process.StartInfo = aplicacionWindows;
  process.Start();


Añadiendo en el using:

using System.Diagnostics;

Donde "backup_postgresql.exe" será el nombre del ejecutable de la aplicación de backup de PostgreSQL que desarrolles.

De esta forma sólo se le mostrará el aviso al usuario de que se va a ejecutar una aplicacón que podría realizar cambios en el sistema (control UAC) cuando pulse en el menú de backup de PostgreSQL.
MensajePublicado:
Dom Jul 29, 2012 8:49 pm
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » VB.Net, C# .Net, Visual Studio .Net  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A