¿Por qué los instaladores de Windows (archivos .msi) tardan tanto más en desinstalarse que otros instaladores?

31

Desde los días de Windows XP, los instaladores de Windows (archivos .msi), incluidos los instaladores InstallShield (que es solo un arranque para MSI) han tardado unas cinco veces más en desinstalar una aplicación que otros instaladores. Lo mismo también suele ser cierto sobre la instalación.

¿Por qué todavía tardan tanto y por qué la gente todavía usa MSI para la instalación? Por ejemplo:

Desinstalar VLC: toma alrededor de 5 segundos.
Desinstalar XYZ: inicia "Preparando para eliminar ..." seguido de un retraso de 15 segundos.

Todo lo que está haciendo es eliminar archivos y limpiar el registro (que puede incluir registros COM), entonces, ¿por qué tarda tanto?

Chris S
fuente
Solo quiero señalar que esto solo es cierto si (1) deshabilita la función de punto de control de restauración del sistema y (2) es un instalador gigantesco (que no es exclusivo de Windows Installer: he visto muchos instaladores lentos de Inno, simplemente porque son enormes). He tenido instaladores de Windows instalados y eliminados en (literalmente) unos pocos segundos. (Por ejemplo, Bootvis se instala en 3 segundos en mi sistema. Se desinstala en la misma cantidad de tiempo. Y no, mi sistema tampoco es tan rápido). La diferencia es que Windows Installer tiene muchas más funciones, por lo que los programas más grandes Úselo más a menudo.
Mehrdad el
@Mehrdad ¿quiso decir (1) habilitar la restauración del sistema?
Chris S
De hecho sí, error tipográfico.
Mehrdad el
2
Vine aquí porque la desinstalación de MSI estaba tardando una eternidad ... y en realidad la razón era que la ventana emergente Do you want to allow the following program from an unknown publisher to make changes to this computer?se ocultaba en el fondo.
Nicolas Raoul
Ver esta respuesta para los detalles técnicos para acelerar instalaciones de MSI: superuser.com/a/296534/11906
Stein Åsmul

Respuestas:

32

El instalador de Windows primero crea sistemáticamente un punto de restauración del sistema, que es una operación bastante lenta.

También del artículo titulado, apropiadamente, "Windows Installer apesta" , un extracto:

Solía ​​ser que la instalación consistiría en un programa que ejecutara y tomara unos simples pasos para instalar su software, y luego hacer lo contrario en la desinstalación.

Así no es como funciona Windows Installer. En lugar de ejecutar un programa para simplemente instalarlo y dejar que se haga, examina el estado de su sistema, luego examina el estado de la base de datos que es el instalador del programa, luego realiza una serie de cálculos demasiado complicados sobre cómo conciliar los dos.

Parece que, en lugar de ejecutar un script de instalación, se trata de resolver un problema de vendedor ambulante. Por eso es tan lento. O al menos, esa es mi impresión.

También agrego que el instalador de Windows mantiene toda la información en el registro, que no es la base de datos más rápida del mundo.

harrymc
fuente
3
Probablemente sea más rápido de lo que dpkgusa para su base de datos de paquetes (aunque, ciertamente, dpkg no almacena todo en él): /var/lib/dpkg/statuses un archivo de texto plano que enumera todos los paquetes que se instalaron una vez, y que desde entonces no se han purgado, y yo Ni siquiera estoy seguro de que siempre omita los purgados.
SamB
3
dpkgsin embargo, no me miente con barras de progreso que dicen "Tiempo restante: 0 segundos" durante dos minutos ...
LawrenceC
20

Windows Installer tiene fama de ser lento. Hay algunas cosas que contribuyen a esto y las abordaré a continuación. Pero, en última instancia, uno debería preguntarse si uno, dos o tres minutos son realmente una cuestión de controversia al instalar y desinstalar software. Tomo más tiempo que eso hojeando canales de TV :)

El registro
Este es el culpable número uno. Windows Installer hace un uso intensivo del registro para sus operaciones. A medida que su sistema madure, a medida que instale y desinstale aplicaciones y que el registro crezca o se fragmente, MSI se volverá más lento. La misma aplicación se instalará y desinstalará mucho más rápido en una instalación inmaculada de Windows que en un sistema maduro. La solución aquí es intentar mantener el registro limpio y desfragmentado.

Para la limpieza del registro, use una de las muchas herramientas disponibles. Pero para la desfragmentación del registro, no puedo recomendar suficiente NTREGOPT para la optimización interna de la colmena y PageDefrag para la desfragmentación de archivos físicos.

La razón por la cual las operaciones de MSI pueden volverse lentas en el registro tiene que ver con cómo MSI lo usa. Windows Installer utiliza el registro para realizar un seguimiento de qué Productos han instalado qué Componentes y en qué Ubicación se instaló. Los GUID de instalación originales se utilizan en formato comprimido. La información por máquina sobre las instalaciones se puede encontrar en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18, mientras que los datos por usuario se encuentran junto a él HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\en una clave debajo y en una clave con el SID del usuario.

Ambas claves pueden ser bastante grandes y contienen numerosas subclaves y valores. Controlan los productos, componentes y KeyPaths de cada aplicación instalada. Toda esta información debe leerse y procesarse para un procedimiento de desinstalación correcto. Sin embargo, el formato de registro enumera las claves en orden alfabético, lo que permite búsquedas binarias. Pero los valores no son. Se almacenan a medida que se crean, por lo que se debe realizar un procedimiento de búsqueda lineal. Lo que ralentiza el rendimiento del algoritmo.

Con todo, MSI es un método bastante completo y preciso para la instalación y desinstalación de software. Pero sufre de su dependencia de registro. El sistema es excelente. Es el registro de Windows que debería haberse revisado hace mucho tiempo :)

Para obtener información más avanzada:
para un análisis profundo de lo que está haciendo MSI durante cada procedimiento de instalación o desinstalación, consulte este artículo que explica cómo configurar MSI Debug. O, para obtener menos pero aún información valiosa, esta es la forma de activar el registro.

Un enano
fuente
44
Además, que yo sepa, MSI usa transacciones para todo lo que hace, por lo que siempre puede hacer una reversión adecuada cada vez que falla una operación. Esto probablemente tampoco contribuya a la velocidad, pero es bastante esencial para la integridad de los datos. (Dejé de contar la frecuencia con la que necesitaba limpiar después de que fallara un instalador NSIS -.-)
Joey
En este momento, estoy instalando OpenOffice y ya ha pasado casi una hora;)
Quiark
Muy informativo. Por mi parte, parece que a menudo aparece el error "No se puede crear el punto de restauración" (¿tal vez se alcanzó la cotización del punto de restauración?) En mis registros de msi, por lo que la creación de puntos de restauración no tiene la oportunidad de obstaculizar mis tiempos de instalación. De todos modos, mis tiempos de instalación siguen siendo lentos, y si la búsqueda de valor es tan lenta como usted dice, supongo que no hay ninguna razón por parte de Microsoft para proporcionar una implementación adicional de información adicional de hoja / nodo en la especificación binaria del registro para Suplemento de búsqueda binaria.
chaz
> Pero, en última instancia, uno debería preguntarse si uno, dos o tres minutos son realmente una cuestión de controversia al instalar y desinstalar software. Sí.
Alexei Averchenko
6

El instalador de Windows tiene muchas ventajas importantes para la implementación corporativa , algunas de las cuales he descrito aquí: https://serverfault.com/a/274609/20599

Gran parte de la lentitud de una sesión de Windows Installer se debe a sus capacidades de reversión . En primer lugar, crea un punto de restauración antes de la instalación o desinstalación (siempre que la restauración del sistema no se haya deshabilitado). Luego, realizará una copia de seguridad de todos los archivos afectados durante la desinstalación y la instalación para garantizar que el sistema pueda restaurarse a su estado original en caso de que ocurra un error.

Otro factor que contribuye es que todos los componentes en el MSI se registrarán en el registro . Esto implica algunos gastos generales .

Para archivos MSI compilados también se necesita algo de tiempo para extraer los archivos de instalación .

Consulte esta respuesta para obtener detalles técnicos para acelerar las instalaciones de MSI .

Stein Åsmul
fuente
3

Los instaladores de Windows se usan comúnmente por muchas razones: integración del sistema operativo, políticas de seguridad, instalaciones desatendidas y mucho más.

La razón más común en la que puedo pensar es en las instalaciones desatendidas y las distribuciones de red. Las grandes corporaciones pueden distribuir fácilmente aplicaciones, al tener el archivo .MSI en una unidad de red y luego simplemente llamando a un archivo por lotes (o aplicación de asistente de distribución) en una máquina remota para automatizar el proceso de instalación.

Si bien existen otras opciones fuera de los archivos .MSI, hay algunas características únicas que se integran con la mayoría de las versiones de Windows que muchos otros instaladores no tienen.

Y para que lo sepas, InstallShield no siempre es un front-end para los archivos MSI. También tienen su propia solución de instalación patentada.

Penetración
fuente
1
La pregunta era por qué MSI tarda tanto en hacer algo, en comparación con los instaladores .exe puros.
Grawity
55
De la pregunta ... "¿y por qué la gente todavía usa MSI para la instalación?"
Avance
@grawity: técnicamente, los instaladores de msi también se pueden empaquetar en exe's, pero eso probablemente divida los pelos.
music2myear