How To: Cómo activar un servicio de Windows

O lo que es lo mismo, cómo cambiar el modo de inicio a un servicio de Windows.

WindowsService

Este post va a ser muy breve, y con un poco de suerte mañana os lo explico con más detalle :-D

El tema es que tenía que iniciar el servicio SQL Server Browser por código, cosa muy sencilla de realizar mediante la clase ServiceController. El problema es que este servicio viene deshabilitado ‘de fábrica‘ en las ediciones express, y al intentar iniciarlo da un error.

Para cambiar el modo de inicio existen dos formas (si alguien conoce una tercera, por favor que me lo diga :-P), la primera es cambiando un valor DWORD del servicio en el registro de Windows (Clave = “HKLM\System\CurrentControlSet\Services\ServiceName” valor = “Start”) y la otra es mediante WMI. La primera no se recomienda ya que no se asegura que en futuras versiones funcione, así que vamos a por la segunda:

public static void enableService(string serviceName, ServiceStartType startType)
{
    string path = "Win32_Service.Name='" + serviceName + "'";
    ManagementPath p = new ManagementPath(path);
    ManagementObject ManagementObj = new ManagementObject(p);
    object[] parameters = new object[1];
    parameters[0] = startType;
    ManagementObj.InvokeMethod("ChangeStartMode", parameters);
}
 

Siendo StartType una enumeración con loas siguientes valores:

public enum ServiceStartType
{
    Automatic = 2,
    Manual = 3,
    Disabled = 4
}

Eso es todo, mañana más...

Un saludo,

Published 9/3/2009 17:58 por Lluis Franco
Comparte este post:

Comentarios

# re: How To: Cómo activar un servicio de Windows

Tuesday, March 10, 2009 5:52 AM por Genaro

Vaya!! y yo ke me quebraba la cabeza y maldiciendo al system.controller taer todo las funciones ecepto porde deshabilitar servicios.

Estoy haciendo un programa ke deshabilita servicios y hace algunos ajustes, y pues con WMI logre el cometido de manipular lso servicios...ahora bien, kisiera colocar un progressbar como forma de indicar al usuario el progreso de los cambios.

tareas()

{

 modificar_servicio(nombre_servicio,tipo_inicio)

 modificar_registro(dierccion,valor)

 borrar_archivos(nombre_archivos[])

}

main()

{

  mientras(tareas() != finalizadas)

     progressbar.valor++

}

(VAYA!! con este pseudo codigo ke te estaba escribiendo s eme ocurrio algo...lo probare)

Lei sobre el backgroundworker y los Theard pero encuntro ke es muy "exagerado y mucho derroche" utilizarlso como para algo tan sencillo...me imaginaba ke existiera una funcion proceso.avanceactual() ke facilitar alas cosas...pero parece ke esto de las barras de progreso no es tan simple. (o por lo menos si uno kere reflejar exactemente lo ke kere y ke no solo sea una barra ke avance con un for ¬_¬)

estab trabajndo en VB.net...pero veo ke lo tuyo es c#. Da igual, asi que si pudieras ayudarme te lo agardeceria mucho.