2012-08-30 24 views
11

Duplicar posible:
How to install a windows service programmatically in C#?eliminar mediante programación un servicio usando C#

¿Hay una manera de quitar mediante programación un servicio usando C# sin tener que ejecutar "InstallUtil.exe/u MyService. exe"?

+0

Es este un servicio escrito en C#? –

+0

Nota: ninguno de los métodos enumerados a continuación funcionará desde una página web que se ejecuta en IIS. IIS no lo permitirá debido a problemas de seguridad. – Kevin

Respuesta

18

Puede usar el ServiceInstaller.Uninstall method en System.ServiceProcess.dll. Por ejemplo:

ServiceInstaller ServiceInstallerObj = new ServiceInstaller(); 
InstallContext Context = new InstallContext("<<log file path>>", null); 
ServiceInstallerObj.Context = Context; 
ServiceInstallerObj.ServiceName = "MyService"; 
ServiceInstallerObj.Uninstall(null); 

Este método intentará detener el servicio primero antes de la desinstalación.

+1

No entiendo, el método de desinstalación toma el estado guardado, no el nombre del servicio. –

+0

Tienes razón. Actualizado con otro ejemplo que encontré .. –

+0

InstallContext no en System.ServicesProcess – ArthNRick

1
System.Configuration.Install.ManagedInstallerClass 
          .InstallHelper(new string[] { "/u", executablePath }); 
+0

Por alguna razón, afirma que el servicio no está instalado, pero lo es. Es un servicio externo escrito en .NET. Obtuve derechos de administrador en mi proceso. – modiX

0

Los servicios se enumeran en el Registro de Windows en HKLM \ SYSTEM \ CurrentControlSet \ services. Si elimina la clave correspondiente al nombre de pila del servicio (no el nombre para mostrar, aquel bajo el cual se registró), efectivamente habrá "anulado el registro" del servicio. Puede hacerlo mediante programación con el objeto Microsoft.Win32.Registry. Necesitará permisos CAS en la computadora ejecutora para modificar las entradas de registro.

+0

Esto no se recomienda – Onkelborg

+3

+1 Esto puede no ser recomendable, tiene el beneficio de funcionar realmente. :) Una alternativa es 'CreateProcess sc.exe delete ServiceName'. – Andomar

1

Si lo que estás tratando de hacer es desinstalar un servicio, has escrito desde dentro y has agregado un instalador al proyecto, simplemente puedes crear una instancia de tu clase de Instalador y llamar a Desinstalar. Por ejemplo, si ha arrastrado un instalador en el servicio de diseñador y llamado a ese componente "ProjectInstaller", puede obtener su servicio para desinstalar sí con el siguiente código:

var installer = new ProjectInstaller(); 
installer.Uninstall(null); 
Cuestiones relacionadas