c# remote ¿Cuál es la mejor manera de automatizar la implementación del Servicio de Windows?



jenkins remote msbuild (1)

He creado un servicio de Windows usando C # en Visual Studio 2010. Investigué mucho sobre la automatización del proceso de instalación. Tengo muchos consejos, pero ninguno funcionó para mí. El servicio de Windows que he creado tiene muchas dependencias y me gustaría que el cliente no tenga interacción con la interfaz de usuario durante la instalación. He creado un proyecto de configuración para esto que incluye todas mis dependencias dentro del instalador.

Proceso involucrado:

  • Crear una compilación para el servicio de Windows
  • Empuje el archivo de configuración (.msi) a la ubicación remota
  • Llame a .msi e instale el servicio de manera silenciosa sin interacción del usuario.

Lo que hice hasta ahora:

  • Creó un script de PowerShell para enviar archivos a una ubicación remota.
  • Ejecutar el script de powershell e instalar el servicio.

Por favor, tenga en cuenta que el script de powershell

sc create "servicename" binpath="somepath"

se usa para instalar el servicio desde un directorio de proyecto, no para instalar el archivo .msi creado con el Proyecto de configuración, estas son dos cosas muy diferentes. Si no entiendes esto no respondas por favor.

Soluciones posibles:

Ahora mi pregunta es. ¿Cómo puedo llevar el instalador del servicio de Windows a una ubicación remota? ¿Y cómo se pueden crear argumentos de compilación personalizados y usar el paquete de extensión msbuild o la tarea Exec e instalar el servicio?

Sé que esto suena una pregunta estúpida e irritante para alguien que no ha instalado el servicio usando (.MSI) creado por el Proyecto de instalación. Pero son mis requisitos los que trato de resolver desde hace semanas en el entorno empresarial.


Haría la mayor parte del trabajo desde el script de powershell.

  1. Use la tarea msbuild Exec como mencionó para agregarla a su proceso de compilación. Aquí hay un artículo bastante bueno sobre el uso de la tarea exec para ejecutar su script powershell .

  2. Dado que está utilizando VS 2010, un proyecto de instalación y despliegue es bastante fácil. Agregue uno a su solución y agregue la salida de su proyecto de servicio. Aquí hay un artículo sobre cómo agregar el proyecto de instalación para un servicio de Windows .

  3. Use sus scripts de powershell para copiar el instalador .msi al servidor remoto. Simplemente puede usar copy-item [source] [destination] si tiene acceso al recurso compartido de archivos.

  4. Detenga el servicio en la máquina remota. Puede usar (get-service -ComputerName [destination] -Name [service-name]).Stop() (de esta pregunta )

  5. Instale el servicio silenciosamente usando psexec \\remotecomputer "[msi-destination-path]" /qn Aquí está el resto de las opciones de la línea de comandos para .msi.

  6. Inicie el servicio utilizando (get-service -ComputerName [destination] -Name [service-name]).Start()

También agregaría un montón de parámetros a la secuencia de comandos powershell para el servidor de destino, el nombre del servicio, etc. Esto facilitará mucho el mantenimiento de esta parte del proceso de compilación. Es muy probable que su agente de compilación también tenga que ser administrador en la máquina de destino.

Por último, asegúrese de poner su script de compilación powershell en el control de código fuente.

Editar (Junio ​​2014)
VS 2013 tiene proyectos de instalador de nuevo! (Lo siento, VS 2012)

Además, si encuentra esta increíble respuesta sobre cómo instalar un servicio de Windows sin usar un proyecto de instalación.





build-automation