¿Por qué Windows Installer solo puede instalar un solo programa a la vez?

10

Siempre me he preguntado por qué Windows Installer solo le permite instalar un programa a la vez. Es muy frustrante no poder iniciar varias instalaciones, especialmente al configurar una nueva instalación de Windows. ¿Cuál es la razón para eso?

Rytis
fuente

Respuestas:

6

Sería muy complejo garantizar la corrección, cuando se realizan instalaciones concurrentes, suponiendo que compartan algunos de los archivos. Esto necesitaría alguna forma de transacciones.

  • Necesitas bloquear archivos
  • Debería ser posible deshacer los cambios intermedios, si la instalación falla (no estoy seguro, ¿es posible ahora?)

Estos conceptos se conocen de las bases de datos transaccionales, pero el tema no es trivial y, por lo general, no se encuentra una infraestructura completamente transaccional en los sistemas de archivos (a pesar de que los sistemas de archivos de registro en diario proporcionan una parte de eso). Un problema es que los bloqueos múltiples pueden conducir a un punto muerto; entonces necesita la detección de punto muerto (o ambos instaladores se bloquearán para siempre) y una forma de tratarlo. Se pueden evitar los puntos muertos (por ejemplo, siempre bloqueando los archivos en el mismo orden), pero hay otros problemas:

Si bloquea todos los archivos necesarios por adelantado, obtendrá efectivamente lo que tiene: un instalador debe esperar hasta que el otro haya terminado. Si no bloquea todos los archivos necesarios por adelantado y continúa, corre el riesgo de que la "transacción" falle. Eso significaría que uno de los instaladores tendría que reiniciarse.

Entonces puede que tenga que pensar en los niveles de aislamiento de las transacciones: para ser completamente correctos, sus transacciones tendrían que ser "serializables" , pero eso no es fácil, incluso para muchas bases de datos.

Incluso puede haber estrategias alternativas para lidiar con los problemas, que evitan el aislamiento total, pero generalmente sería aún más difícil demostrar su corrección.

Creo que, con la instalación simultánea, tendríamos muchos más problemas difíciles de resolver después de la instalación, especialmente porque no creo que un proveedor de sistemas operativos (o una distribución) pasara por todos los problemas para hacerlo 100% limpio. Por lo tanto, preferiría no usarlo, incluso si fuera ofrecido por el sistema operativo.

Nota

Pero tal vez lo que realmente quieres es ni siquiera instalar "al mismo tiempo". Tal vez sería suficiente si pudieras poner en cola las instalaciones, que luego se ejecutan una tras otra (idealmente sin hacer preguntas en el medio). Y eso es realmente algo, algunos otros sistemas operativos (distribuciones) se manejan mucho mejor.

Chris Lercher
fuente
1
Si bien es correcta, esta respuesta me parece demasiado detallada. Es probable que alguien que pregunta por qué el servicio de instalación funciona de la manera en que lo hace no entienda esta respuesta.
gWaldo
2
@gWaldo: Bien, tal vez tengas razón ... Por otra parte, no solo quiero decir "Es complejo, créeme (punto). No lo entenderías de todos modos". Tal vez el OP (o alguien que tropiece con esta pregunta) esté realmente interesado, y una respuesta que llegue al fondo del problema lo ayudará a estimar, si realmente hay mucha complejidad involucrada para resolver algo que parece tan fácil superficie. ¿Quién sabe?
Chris Lercher
Muy cierto. Ese es un buen punto.
gWaldo
Si bien todo lo que se habla sobre el aislamiento parece plausible, puede ejecutar varios instaladores si no utilizan el marco de Windows Installer. Nunca he tenido ninguno de ellos roto cuando se ejecutan uno al lado del otro ... Tal vez solo tengo suerte :) En cuanto a las instalaciones de colas, hay herramientas para eso, pero dadas las CPU multinúcleo (diablos, las CPU de escritorio ahora pueden ejecutar 8 hilos ...), parece que correrlos lado a lado sería la respuesta (aunque todavía pueden luchar por las E / S).
Rytis
2
@Rytis: Ojalá tuviera la misma suerte :-) - He tenido instaladores que se rompen al azar, incluso sin ejecutarlos simultáneamente. Acerca de los multinúcleos: habría otra forma de utilizarlos: mediante el uso de múltiples núcleos dentro de un proceso de instalación. Eso no siempre es posible o fácil, pero se puede coordinar mucho mejor. En general, creo que el mayor ahorro de tiempo sigue siendo, si todo el proceso de instalación (cola) solo hace preguntas al principio y al final. Luego puede tomar un café o hacer otra cosa mientras se ejecuta la instalación (y utilizar los núcleos restantes para lo que quiera hacer).
Chris Lercher
6

Esto es por diseño, para evitar tener dos instalaciones manipulando los mismos archivos / carpetas / claves de registro / etc .; probablemente podría haberse hecho de diferentes maneras, pero Microsoft tomó esta decisión.

Massimo
fuente
¿Alguna referencia para respaldar su reclamo?
Aaron Digulla
1

Puede patear varios archivos MSI para instalarlos en una secuencia rápida uno tras otro utilizando un archivo por lotes. No puede ejecutar dos archivos MSI simultáneamente en el sentido de que ambos escriben en el disco al mismo tiempo.

La razón es que parte de una instalación de MSI se ejecuta como una "transacción", una secuencia de cambios que se confirman o se deshacen dependiendo de si las acciones en la lista de transacciones se completan sin error. Todos deben completarse sin error y luego se confirma la transacción; de lo contrario, se produce una reversión completa de todos los cambios. De ello se deduce que solo una de esas transacciones puede estar activa en un momento dado.

En el nivel técnico de MSI, solo las acciones entre las acciones estándar InstallInitialize e InstallFinalize en InstallExecuteSequence se ejecutan como una transacción. No se supone que ocurran cambios en el sistema fuera de estas acciones, pero a veces los archivos MSI están diseñados erróneamente para realizar cambios en otras secuencias.

Stein Åsmul
fuente