Paquetes MSI frente a nuget:¿Cuáles son mejores para la entrega continua?
-
20-12-2019 - |
Pregunta
Analicemos el siguiente tema.Hay una aplicación que actualmente se está implementando con un método xcopy muy conocido. Este enfoque dificulta la gestión de dependencias, actualizaciones de archivos, etc.Existe una idea para iniciar la implementación de aplicaciones con la ayuda de algunos paquetes, ya sabes como lo haces en Linux con la ayuda de RPM, pero para Windows.
Entonces tengo una pregunta:¿Qué sistema de paquetes es mejor usar en el instalador clásico de Windows (msi) o pepita ¿o algo mas?
Solución
Ad hoc: ¿Cómo evito fallas de diseño comunes en mi solución de implementación WiX/MSI?- un resumen ad-hoc muy desordenado y poco ideal de problemas comunes encontrados en archivos MSI.No es bueno.¿Mejor que nada?Las cosas que no están en los libros (demasiado desordenadas).
Tema importante: ¿Cómo evito distribuir información confidencial en mi MSI por accidente?
WiX y MSI:
MSI es el estándar de aplicación corporativa aceptado.Tiene algunos beneficios corporativos importantes (
and the short, concise version
) en comparación con las técnicas de implementación heredada. WiX es la nueva forma de código abierto para crear archivos MSI.
- Descargar el conjunto de herramientas Wix (
1)
Principal WiX configuración,2)
Votivo - Configuración de integración de Visual Studio- Documentación WiX
- Después de la instalación de WiX, ubique
WiX.chm
ymsi.chm
archivos de ayuda en la carpeta de instalación "%ProgramFiles(x86)%\WiX Toolset v3.11\doc
" para acceder rápidamente a la documentación.- En línea:
WiX Reference Manual v3
,Official WiX Tutorial
.Github
,Bug Tracker
,Mailing List
,FireGiant WiX KDB
(FireGiant es la rama comercial de WiX).- Para entender wix, es posible que desees leer un Resumen rápido y no oficial de la historia detrás de esto..
- MSBuild - usando Visual Studio, Votive y MSBuild
- Cosecha (1):WiX tiene su propia herramienta para generar marcado WiX basado en una carpeta de entrada.
- La herramienta se llama calor.exe.La rama comercial de WiX FuegoGigante tiene una herramienta llamada ola de calor con más funciones.
- La herramienta no la he probado en gran medida.
WixHeatATLHarvesterExtension
: https://github.com/nirbar/WixHeatATLHarvesterExtension (una extensión de WiX Heat para recopilar información de registro de módulos x64)
Otras herramientas:
- Entonces quizás quieras consultar otras formas de entregar un instalador, además de Wix, leyendo:
- Herramientas principales: Instalador avanzado, - Instalar escudo, - Suite PACE
Hola mundo y hola WiX:
- Finalmente ver un ejemplo completo de cómo se ven un archivo fuente de Wix y sus componentes en proyecto de código.Este es el "Hola Mundo" de Wix.
- "Hola WiX - paso a paso en Visual Studio".
- esto necesita WiX y Votivo (Extensión de Visual Studio de WiX Toolset: integración de Visual Studio de WiX para que obtenga Intellisense). Ver página de descarga.
- Los comentarios en línea en el marcado inferior probablemente sean todo lo que necesita para comenzar.
- Pequeña muestra de variables/definiciones del preprocesador WiX.
Ejemplos de vídeos:
Más código de muestra:
Inicio rápido de WiX:Estos son algunos de los mejores enlaces de código de muestra que he encontrado:
- Helge KleinMuestra de WiX del mundo real - mira esto (Wayback - Versión archivada).
- Rainer StropekMuestras de WiX en Github - puede ser muy útil.
- De MSI a WiX por Alex Schevchuk - contenido añejo, pero excelente.
- Chris PintorTutoriales de IsWiX - excelentes muestras de WiX.
Y finalmente:
- phil wilsonRepositorio de Github para muestras de MSI: https://github.com/Apress/def-guide-to-win-installer.El mejor contenido, pero envejecido.Muestras generales de MSI, no de WiX como tal.
- Mi sitio experimental: instalardude.com.
- Cómo-crear-un-instalador-MSI-de-servicio-Windows-usando-WiX.
- Extensión WiX: https://github.com/nirbar/PanelSwWixExtension (
Dism.exe
,etc...
)
Depuración:Siempre revisa todo registros de eventos, registros de aplicaciones y Registros MSI - si está disponible.Sólo por mencionarlo.Y Utilice cualquier herramienta de depuración disponible. y google el mensaje de error exacto antes de hacer cualquier otra cosa.
Y compruebe si faltan tiempos de ejecución evidentes.Por ejemplo: .Net
, .Net Core
, Java
, Silverlight
, Direct X
, VC++ Runtime
, MS-XML
(legado), etc...
.
Depuración de acciones personalizadas:
- Causas comunes de fallas en el tiempo de ejecución de acciones personalizadas
- Depuración de acciones personalizadas
- Para código nativo/C++ simplemente adjunte el depurador a
msiexec.exe
- Videotutorial de acciones personalizadas de depuración de C# del instalador avanzado
registro MSI:
- Descripción general y resumen (cómo iniciar sesión, interpretar el archivo de registro, etc...)
- Sitio de instalación:Registro MSI "instrucciones"
- Más información de registro de MSI
Visor de eventos:
- Sujetar Tecla de Windows, grifo R, tipo
eventvwr.msc
y presione Ingresar.- Ir a
Windows Logs => Applications
.BuscarMsiInstaller events
.- Consulte también los otros registros (
Security
,System
,Configuration
).Depuración general:
- "Luz de depuración"
- Problema de inicio de la aplicación:Ideas de depuración (torpedos en plena extensión)
ProcMon.exe:La herramienta del oficio.La talla única para todos herramienta.Las rodillas de la abeja, el topper-most, el salto cuántico, el del gato pijama.Puede ser un desafío usarlo de manera efectiva, pero es el La mejor herramienta de depuración de propósito general que es gratuita.
Herramientas de depuración:
- Herramientas para depurar problemas de dependencia -
ProcMon.exe
,VS
,Dependency Walker
,etc...
- Herramientas de depuración de servicios esenciales:
Event Viewer
,Task Manager
,Services.msc
Process Explorer
,NET command
,SC.exe
- Preguntas frecuentes sobre servicios de Windows (FAQ)
Código de error:Búsqueda de códigos de error y mensajes de excepción.
- "La base de datos de los números mágicos" - búsqueda en línea.
- Comprobación de códigos de error - varias herramientas y enfoques.
Un mnemotécnico de implementación:Un mnemotécnico general para pensar en problemas de implementación:
What is locking
(en uso, malware),what is blocking
(permisos, antivirus, herramientas de seguridad),what is corrupt
(disco, malware, configuraciones, cifrado)what are unexpected system states
(espacio en disco, configuración de fecha y hora, idioma, licencia, estado del parche de Windows, ruta demasiado larga, PendingFileRenames, etc.),what are incompatible products
(cosas que no pueden coexistir),what is unreachable or misconfigured
(lo que apunta a ubicaciones y recursos erróneos:nombres de servidores de red, rutas de disco, URL, bases de datos, servicios, entornos UAT, entornos PROD, etc...) y por último pero no menos importante:what is missing
(tiempo de ejecución, imagen de recursos, archivo de configuración, etc.)?
NOTA:Siempre primero (paso 8 a continuación):
Google exact error message
.Error expreso al iniciar la depuración:
1)
Reboot
,2)
disable anti-virus
,3)
launch as admin
y comprobar,4)
Controlardependencies and runtimes
(Java, Tiempo de ejecución de VC++, .NETO, etc...).Luego, si es necesario:5)
verbose log
,6)
event logs
,7)
Try on a virtual if you still can't get it working? Or secondary computer?
También8)
google exact error messages
y comprobar los comentarios de los usuarios,9)
Run update for the application in question?
(Un nuevo instalador podría eliminar la situación de error).10)
Ejecute una verificación completa paramalware
¿también?Está por todos lados estos días.11)
Algunos programas (a menudo software de servidor) pueden necesitar que se solucionen los ajustes de configuración (misconfiguration
).Las aplicaciones de escritorio pueden necesitarlicense
para lanzar en absoluto.
¿Cerraduras?:Con permiso y bloqueos puedes intentar
run the tool with elevated rights
?Podría tener daños en el disco.disk errors
?Faulty ACL permissions
?(posible).Suanti-virus suite
ha bloqueado algún archivo que MSI está intentando volver a colocar en su lugar.Puedes intentar desactivarlo temporalmente para verlo.Tenga en cuenta que el archivo puede haber sidoquarantined
también (se mudó a otro lugar).
¿Trucos genéricos?:Para configuraciones que no se instalan correctamente.Algunos trucos genéricos a continuación, además de comprobar
event logs
yinstallation-
yapplication logs
ygoogling any error messages
(siempre haga eso también, tal vez primero, pero tal vez simplemente reinicie primero, antes de enfrentar toda la complejidad):
- Reiniciar:Reinicie primero después de una instalación fallida para ver si eso resuelve bloqueos y cambios de nombre pendientes.
- Otra computadora:¿Intenta instalar en otra máquina física?
- ¡Importante prueba de humo de los medios de instalación!
- Virtual:¿Intenta instalar en una máquina virtual?
- A menudo está desactualizado, verifique los tiempos de ejecución, verifique Windows Update.
- Tiempos de ejecución:Asegúrese de que los tiempos de ejecución requeridos de varios tipos estén disponibles en la versión requerida:
- Común:
VCRedist
,.NET
,.NET Core
,etc...
- Específico:
Python
,DBMS systems
(PostgreSQL
,MSSQL
,etc...
)- Cuenta secundaria:Intente instalar en el cuadro principal usando una cuenta de administrador diferente.Esto puede solucionar problemas causados por errores en el perfil de usuario (no es tan infrecuente).
- Archivos de instalación locales:Copie los archivos de instalación localmente si están en la red cuando se invoquen (para eliminar fuentes de error de red).
- Problemas de localización:No es raro que las configuraciones entregadas en otros idiomas contengan errores nuevos que no se ven en el instalador original (generalmente en inglés).
- "Campo Murphy":
"We have managed to add additional bugs to the internationalized setups beyond the English version"
.¡Oh, dice la humanidad!Gorrón.- ¿Intenta descargar una versión de instalación en inglés y probar la instalación?
- ¿Pruebe la configuración localizada en una máquina en inglés o virtual?
- Investigue también ejecutar con otra cuenta de usuario con configuraciones de idioma diferentes.
Y - nuevamente - los "bloqueadores" comunes:
- Archivo de instalación dañado:Archivo de instalación dañado.¿Volver a descargar para estar seguro?¿Hacer esto como uno de los primeros pasos antes de perder un día entero?¿Britness de plataforma correcto?¿Arquitectura de CPU correcta?
- malware:El malware puede causar casi "cualquier cosa" en términos de problemas.
- Software de seguridad:
Anti-virus
,firewalls
,scanners
,etc...
puede interferir con la instalación.Deshabilítelo temporalmente si es posible cuando sea necesario.- Espacio del disco:¡Asegúrese de tener suficiente espacio en disco!
- Formas de liberar espacio en disco. Versión larga.
- Solo corre
cleanmgr.exe
primero.- Apoderado:Si existe un requisito de red, ¿existe un servidor proxy que bloquee las cosas?
- Políticas:Puede haber políticas vigentes en las redes administradas para bloquear ciertas funciones que imposibiliten la instalación.¿Probar virtualmente?Generalmente menos restringido.
- Errores de disco:Escanee el disco para ver si está bien.Si no, arréglalo primero.Los discos NVMe modernos pueden perder una gran cantidad de datos debido a cortes de energía en computadoras de escritorio sin UPS.
Algunos enlaces:
- El proceso de configuración en Windows falla y se deniega el acceso al intentar crear la carpeta "uc.micro"
- La instalación de SQL Server 2017 está bloqueada
- El instalador de Visual Studio falla en AspNetDiagnosticPack.msi
- El instalador encontró un error inesperado al instalar este paquete: código de error 2896
Fácil acceso:
- Falsos positivos
- Métodos de clase de instalador - Más métodos de clase de instalador
- ¿Funcionaría este método de instalación de COM+?
- Mejores prácticas del instalador de Windows
- Administrador de reinicio y registro
- ¿Cambiar el GUID de mi componente en wix?
- Simplifique el marcado de WiX - puedes omitir muchos atributos fuente de tu archivo xml de Wix
- Ejecución de aplicaciones heredadas (
virtuals
,compatibility mode
,repackaging
,etc...
) - ¿Qué son las reglas de ICE?
- Preprocesador versus variables de localización y la cuestión de los archivos de inclusión
- Preprocesador WiX
Reempaquetado, depuración de inicio de aplicaciones:
Actualizaciones:
- Causas de fallas importantes en las actualizaciones
- Algunas restricciones técnicas de actualización menores
Algunos otros enlaces de WiX:
- Simplifica tu marcado WiX.
- Registrar COM EXE con WiX.
- No se puede desinstalar, falla.
- Bibliotecas de enlaces dinámicos.
- Entornos de depuración de Microsoft.
- ¿Cómo creo un paquete de requisitos previos para Windows Installer?
- ¿Cómo incrusto CustomAction.CA.dll en MSI?
- El programa instalado se elimina automáticamente cada vez que el servidor se reinicia desde Windows Server 2012 R2
Trámites:
- Abrir carpeta temporal: Tecla de Windows => Toque R => Tipo:
%TEMP%
=> Presione: Ingresar. - ARP:Ir comenzar → correr → appwiz.cpl → INGRESAR para abrir el subprograma Agregar o quitar programas (o haga clic en Agregar o quitar programas en el panel de control).
- Configuración GUI Win8/10: Tecla de Windows + Toque I =>
Apps & Features
.Seleccione la entrada y desinstale. - Inicio rápido de Powershell:sostener clave de Windows, grifo R, escribe "powershell" y presiona Ingresar.
- Reiniciar el controlador de gráficos: clave de Windows + Control + Cambio y toque B.
Algunos buenos enlaces de inicio para aprender Wix:
- Mis sugerencias de inicio rápido de Wix
- Buenos recursos para aprender a crear instaladores MSI desde WiX
- ¿Cómo implementar la actualización del instalador de WiX? (actualización importante)
- ¿Cuáles son las limitaciones de WiX y WiX Toolset?
Extraer archivos de Setup.exe
Paquete WiX o desde un archivo MSI:
- Extraer MSI de EXE - incluyendo cómo extraer archivos incrustados en un ejecutable del paquete WiX Burn.
- ¿Cómo puedo comparar el contenido de dos (o más) archivos MSI? - Incluyendo cómo extraer archivos de un MSI usando WiX
dark.exe
herramienta
Como escribí en mi sugerencia "Inicio rápido de Wix"publicación arriba: Wix es práctico. Simplemente concéntrese en muestras simples pero completas del mundo real como la de proyecto de código - leer la documentación por sí solo probablemente resulte simplemente confuso.
Concéntrese en dividir su aplicación en componentes y configurar una actualización importante. Utilice un archivo por componente como regla general, y lea esta respuesta para comprender mejor la creación de componentes: ¿Cambiar el GUID de mi componente en wix?
Una mejora importante es el mecanismo de actualización más utilizado para el software implementado (el otro tipo de actualización común es la actualización menor).Obviamente, es fundamental que pueda actualizar lo que ya ha implementado.Haga que los escenarios de actualización funcionen antes de implementar su primera versión de software para que tenga confianza en su solución de implementación.
Una vez que haya configurado sus componentes y su solución de actualización esté funcionando, el resto de las piezas encajarán a medida que avance en los requisitos de implementación de su aplicación y busque ejemplos en el Sitio de tutoriales de Wix: https://www.firegiant.com/wix/tutorial/.
Para aquellos que escriben código Wix directamente (sin un editor GUI), les sugiero que consulten esta respuesta para encontrar una forma de mantener sus archivos fuente concisos: ¿Sintaxis para guías en WIX?
Leer más:
Otros consejos
Ahora estoy bajando este camino, donde he heredado software utilizando MSI / WIX para el instalador, pero mirando convertir nuestro proceso a la entrega continua y enviar las actualizaciones que están instaladas sin la interacción con el cliente. Creo que es incorrecto a Pigeon Hole Nuget como una herramienta de SDK, en su esencia, es una herramienta para implementar conjuntos de archivos visitados. Además, si el software ya está implementando respuestas en gran medida en NUDET, y ya está envasando sus ensamblajes en paquetes de nuget para uso interno, entonces, ¿por qué agregar tecnología adicional a la mezcla por el bien? Paquete en un NUGET.EXE en su MSI, la actualización de llamadas en él periódicamente, realizada.
Sé que WIX soporta creando parches, pero parece que es una idea de último momento. Además, ¿qué sucede si su parche falla la instalación? ¿Instalar parches fuera de servicio? Su instalador principal requiere permisos de UAC, mientras que su parche no lo hace?
Creo que los tiempos están cambiando, y MSI representa una forma más antigua de pensar en las cosas. Chocolatey es un buen ejemplo, pero aún está en esta etapa híbrida, mezclando ambas tecnologías.
MSI es más como tirar, obtienes un paquete, luego instalalo. NUGET es más como un Empuje Stratergy: obtenga el nombre de un paquete, instálelo, luego, periódicamente, puede llamar a la actualización, y se descarga e instala una nueva versión.