En este post, te explicaré cómo instalar un servicio de Windows desarrollado en .NET Framework 4.7.2 utilizando installutil, permitiendo personalizar el nombre del servicio y su nombre de visualización durante la instalación.
Modificar el Instalador del Servicio
Para habilitar la personalización, necesitamos modificar la clase del instalador para que acepte parámetros al instalar el servicio. Aquí tienes un ejemplo completo:
private void SetServiceName()
{
if (Context.Parameters.ContainsKey("ServiceName"))
{
ADSSServiceInstaller.ServiceName = Context.Parameters["ServiceName"];
}
if (Context.Parameters.ContainsKey("DisplayName"))
{
ADSSServiceInstaller.DisplayName = Context.Parameters["DisplayName"];
}
}
protected override void OnBeforeInstall(IDictionary savedState)
{
SetServiceName();
base.OnBeforeInstall(savedState);
}
protected override void OnBeforeUninstall(IDictionary savedState)
{
SetServiceName();
base.OnBeforeUninstall(savedState);
}
Este código utiliza los parámetros ServiceName y DisplayName pasados durante la instalación para configurar dinámicamente los nombres del servicio.
Instalar el Servicio con installutil
Para instalar el servicio con nombres personalizados, utiliza el siguiente comando en la consola:
installutil /ServiceName="MiServicioPersonalizado" /DisplayName="Mi Servicio Personalizado" MiServicio.exe
ServiceName: Define el nombre interno del servicio.DisplayName: Define el nombre que aparece en la lista de servicios de Windows.
Nota: Ejecuta el comando como administrador para evitar problemas de permisos.
Verificar la Instalación
Una vez instalado, verifica que el servicio esté registrado correctamente utilizando cualquiera de las siguientes opciones:
-
Herramienta gráfica: Abre
services.mscy busca el nombre de visualización configurado. -
Línea de comandos: Usa el comando
sc querypara confirmar:
sc query "MiServicioPersonalizado"
Asegúrate de usar el nombre correcto del archivo .exe del servicio.
Nota: En caso de que el servicio no se desinstale correctamente o aparezca un error, verifica que:
-
El servicio no esté en ejecución. Si lo está, detenlo manualmente con el siguiente comando:
net stop "MiServicioPersonalizado"
-
Estás ejecutando el comando con permisos de administrador.
Desinstalar el Servicio
Si necesitas desinstalar el servicio, puedes hacerlo también con installutil. Usa el siguiente comando:
installutil /u /ServiceName="MiServicioPersonalizado" MiServicio.exe
Solución de Problemas Comunes
-
Error de permisos: Asegúrate de que la consola esté ejecutándose como administrador.
-
Faltan parámetros: Si no defines
ServiceNameoDisplayNameal instalar, puedes añadir valores predeterminados en el código:
if (Context.Parameters.ContainsKey("ServiceName"))
{
serviceInstaller1.ServiceName = Context.Parameters["ServiceName"];
}
else
{
serviceInstaller1.ServiceName = "DefaultServiceName";
}
- Archivo no encontrado: Verifica que estás apuntando al archivo
.execorrecto, generado al compilar el proyecto.
installutil no se reconoce como un comando interno o externo"
Si encuentras este error, significa que la herramienta installutil no está disponible en el PATH del sistema. Aquí tienes las soluciones:
-
Usa la ruta completa de InstallUtil:
-
Para sistemas de 64 bits:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\installutil.exe -
Para sistemas de 32 bits:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe
Ejemplo de comando:
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\installutil.exe" /ServiceName="MiServicioPersonalizado" /DisplayName="Mi Servicio Personalizado" MiServicio.exe -
-
Agrega la ruta al PATH del sistema:
-
Ve a "Configuración avanzada del sistema" y selecciona "Variables de entorno".
-
Edita la variable
Pathy añade la ruta completa ainstallutil.
Por ejemplo:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Reinicia la consola para que los cambios surtan efecto.
-
-
Verifica la instalación del .NET Framework:
Si la herramienta no está presente, asegúrate de tener instalado el .NET Framework 4.0 o posterior.
-
Usa PowerShell como alternativa:
Puedes instalar el servicio con
New-Serviceen PowerShell:
New-Service -Name "MiServicioPersonalizado" -DisplayName "Mi Servicio Personalizado" -BinaryPathName "C:\ruta\a\MiServicio.exe"
¡Y listo! Ahora tienes un servicio de Windows que puedes instalar con nombres personalizados fácilmente. Este enfoque es ideal para gestionar múltiples servicios o personalizar configuraciones en distintos entornos. ¿Tienes alguna duda o necesitas ayuda adicional? ¡Déjame un comentario! 😊