la instalación de servicio de Windows con SC.exe o InstallUtil.exe - no hay diferencia, pero ¿cuál?

StackOverflow https://stackoverflow.com/questions/4692250

Pregunta

SC.exe y InstallUtil tanto instalar / desinstalar servicios de las ventanas. Pero ellos no parecen funcionar de la misma manera.

¿Cuál es la diferencia?


Por ejemplo InstallUtil falla (algún archivo o la dependencia no se encuentra el error), mientras que Sc crear felizmente instala el servicio. Demasiado añadir a la extrañeza; el servicio no aparece si funciono net start en la consola. Pero muestra en la interfaz gráfica de servicios. Variantes de que esto ocurra cuando trato de desinstalación.

He escrito el servicio mismo y versiones anteriores funcionan. Dotnet3.5.

¿Fue útil?

Solución

Sí, la instalación de un servicio no es particularmente complicada. Sólo se necesita escribir un puñado de claves de registro. Usted puede tener una mirada-ver con Regedit.exe, busque HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ servicios.

Sc.exe puede escribir estas teclas también, usando los argumentos de línea de comandos suministrados. Sin embargo, esta no es la forma correcta de hacerlo. El punto de InstallUtil.exe es que puede activar costumbre código de instalación. Código que el autor escribió servicio. Que no es tan infrecuente, los servicios tienden a info paquete de configuración en sus claves de registro para su propio uso. Usted verá un montón de evidencia de que cuando se tiene una mirada con Regedit.

Otros consejos

Yo prefiero sc.exe sobre installutil.exe millón de veces.

installutil fuerzas que le permite añadir la clase ProjectInstaller horrible (creo) y hardcode allí el nombre del servicio y descripción de servicio.

Esto es lo hace muy difícil de poner dos versiones de un mismo servicio que se ejecuta en la misma máquina al mismo tiempo.

Es por eso que simplemente no se utilizan InstallUtil.exe en absoluto. También debido a las respuestas anteriores: que lo necesite para estar en su paquete de despliegue. sc.exe ya está en cualquiera de Windows XP y superior (creo).

diferencia

principal es que InstallUtil no es de utilidad destinada a la instalación del servicio, sino como herramienta general instalador. Desde las páginas de MSDN se puede ver que:

"La herramienta Instalador es una utilidad de línea de comandos que le permite instalar y desinstalar los recursos del servidor ejecutando el instalador componentes en conjuntos especificados. Esta herramienta funciona en conjunto con las clases del espacio de nombres System.Configuration.Install ".

Por lo tanto, se puede instalar el servicio pero tiene muchos muchos muchos otros beneficios. La creación de ejecutables basados ??en instalador clase le da un control programático de todo procedimiento de instalación / desinstalación. ServiceInstaller y < a href = "http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceprocessinstaller%28v=vs.110%29.aspx" rel = "noreferrer"> ServiceProcessInstaller , por ejemplo , se utilizan para la instalación del servicio.

utilidad 'Sc' se utiliza para el control del servicio y 'crear' comando basta con crear un servicio basado en elegido ejecutable.

En el ejemplo
1. No está destinado a ser instalado con InstallUtil y la respuesta de error debe ser muy claro al respecto.
2. InstallUtil falla debido a un error en el código de instalación y el uso de sc create , probablemente, va a crear un servicio defectuoso para usted. Comprobar en {} exe_name .InstallLog para más detalles.

A partir de la experiencia de uso de desinstalación: sc.exe bajo Windows 7 elimina la entrada de la lista de inmediato, mientras que después de desinstalar con installutil hay una necesidad de reinicio

Mientras InstallUtil es la manera preferida para ir con servicios .NET, Una de sus defectos es que no va a recoger redirecciones vinculante de su app.config, que en ciertas circunstancias, puede causar la instalación de fallar. Ahí es donde el uso de SC que podría obtener algún beneficio, a expensas de no ser capaz de ejecutar código en el momento de la instalación.

Por desgracia para el PO, TopShelf no existía en el momento de su pregunta. Funciona alrededor de las deficiencias tanto de SC y InstallUtil, y permite que el servicio se inicie con el depurador asociado al arrancar en Visual Studio. Además, es mucho más fácil de escribir myservice install de tener que profundizar en la carpeta específica para InstallUtil, o escribe en un montón de parámetros para SC.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top