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


SC.exe y InstallUtil ambos instalan/desinstalan servicios de windows. Pero no parecen funcionar de la misma manera.

¿Cuál es la diferencia?


Por ejemplo InstallUtil falla (algún archivo o dependencia no encontrada error) mientras que Sc create felizmente instala el servicio. También añadir a la extrañeza; el servicio no se muestra si corro net start en la consola. Pero aparece en la interfaz gráfica de servicios. Las variantes de esto suceden cuando intento desinstalar.

Yo mismo he escrito el servicio y las versiones anteriores funcionan. Dotnet3. 5.

Author: LosManos, 2011-01-14

5 answers

Sí, instalar un servicio no es particularmente complicado. Solo se necesita escribir un puñado de claves de registro. Puedes echar un vistazo con Regedit.exe, vaya a HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services.

Sc.exe también puede escribir estas claves, usando los argumentos de línea de comandos suministrados. Sin embargo, esta no es la manera correcta de hacerlo. El punto de InstallUtil.exe es que puede activar código de instalación personalizado. Código que el autor del servicio escribió. Que no es tan raro, los servicios tienden a rellenar información de configuración en sus claves de registro para su propio uso. Verás muchas pruebas de eso cuando eches un vistazo a Regedit.

 27
Author: Hans Passant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-14 17:52:39

Prefiero sc.exe sobre installutil.exe millones de veces.

InstallUtil te obliga a añadir la terrible clase ProjectInstaller (creo) y codificar allí el nombre del servicio y la descripción del servicio.

Esto hace que sea muy difícil poner dos versiones del mismo servicio ejecutándose en la misma máquina al mismo tiempo.

Es por eso que simplemente no uso InstallUtil.exe en absoluto. También debido a respuestas anteriores: necesita que esté en su paquete de implementación. sc.exe ya está en cualquier Windows Xp y superior (creo).

 13
Author: Kat Lim Ruiz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-28 16:27:17

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

" La herramienta de instalación es una utilidad de línea de comandos que le permite instalar y desinstalar recursos del servidor ejecutando el instalador componentes en conjuntos especificados. Esta herramienta funciona en conjunto con clases en el Sistema.Configuración.Instalar espacio de nombres."

Así que puede instalar el servicio pero tiene muchos otros beneficios. Crear ejecutables basados en la clase de instalador le da control programático de todo el procedimiento de instalación/desinstalación. ServiceInstallery ServiceProcessInstaller, por ejemplo, se utilizan para la instalación de servicios.

La utilidad'Sc' se utiliza para el control de servicio y el comando 'create' solo creará el servicio basado en el ejecutable elegido.

En su ejemplo
1. No está destinado a ser instalado con InstallUtil y la respuesta de error deberían ser bastante claras al respecto.
2. InstallUtil falla debido a un error en el código de instalación y usando sc create probablemente creará un servicio defectuoso para usted. Compruebe en {exe_name}.InstallLog para más detalles.

 5
Author: Bizniztime,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-24 11:08:26

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

 2
Author: Cyryl Płotnicki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-25 09:14:15

Mientras que InstallUtil es la forma preferida de ir con los servicios.NET, una de sus deficiencias es que no recogerá redirecciones de enlace de su aplicación.config, que en ciertas circunstancias, puede causar que la instalación falle. Ahí es donde el uso de SC podría obtener algún beneficio, a expensas de no poder ejecutar código en el momento de la instalación.

Desafortunadamente para el OP, TopShelf no existía en el momento de su pregunta. Trabaja en torno a las deficiencias de SC e InstallUtil, y permite que el servicio se inicie con el depurador conectado al iniciarlo en Visual Studio. Además, es mucho más fácil escribir myservice install que tener que profundizar en la carpeta específica para InstallUtil, o escribir una tonelada de parámetros para SC.

 1
Author: Joe The Coder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-08 22:51:39