Pourquoi Windows Installer ne peut installer qu'un seul programme à la fois?

10

Je me suis toujours demandé pourquoi Windows Installer ne vous permet d'installer qu'un seul programme à la fois. Il est très frustrant de ne pas pouvoir lancer plusieurs installations, en particulier lors de la configuration d'une nouvelle installation de Windows. Quelle est la raison de ceci?

Rytis
la source

Réponses:

6

Il serait très complexe de garantir l'exactitude, lorsque des installations simultanées ont lieu - en supposant qu'elles partagent certains fichiers. Cela nécessiterait une certaine forme de transactions.

  • Vous devez verrouiller les fichiers
  • Il devrait être possible d'annuler les modifications intermédiaires, si l'installation échoue (pas sûr, si c'est possible maintenant?)

Ces concepts sont connus des bases de données transactionnelles - mais le sujet n'est pas anodin, et vous ne trouvez généralement pas d'infrastructure entièrement transactionnelle dans les systèmes de fichiers (même si les systèmes de fichiers journalisés en fournissent une partie). Un problème est que plusieurs verrous peuvent conduire à un blocage - alors vous avez besoin d'une détection de blocage (ou les deux installateurs se bloqueront pour toujours), et un moyen de traiter cela. Les interblocages peuvent être évités (par exemple en verrouillant toujours les fichiers dans le même ordre), mais il y a d'autres problèmes:

Si vous verrouillez tous les fichiers requis à l'avance, vous obtenez efficacement ce que vous avez: un installateur doit attendre que l'autre soit terminé. Si vous ne verrouillez pas tous les fichiers requis à l'avance et continuez, vous risquez que la "transaction" échoue. Cela signifierait que l'un des installateurs devrait être redémarré.

Ensuite, vous devrez peut-être penser aux niveaux d'isolement des transactions - pour être entièrement correct, vos transactions devront être "sérialisables" - mais ce n'est pas facile, même pour de nombreuses bases de données.

Il peut même y avoir des stratégies alternatives pour résoudre les problèmes, qui contournent l'isolement complet, mais il serait généralement encore plus difficile de prouver leur exactitude.

Je pense qu'avec une installation simultanée, nous aurions beaucoup plus de problèmes de post-installation insolubles - surtout parce que je ne pense pas qu'un fournisseur de système d'exploitation (ou une distribution) se donnerait du mal pour le rendre 100% propre. Je préférerais donc ne pas l'utiliser, même s'il était proposé par l'OS.

Remarque

Mais peut-être que ce que vous voulez vraiment, ce n'est même pas installer "en même temps". Peut-être que ce serait suffisant, si vous pouviez mettre en file d'attente les installations, qui sont ensuite exécutées l'une après l'autre (idéalement sans poser de questions entre les deux). Et c'est vraiment quelque chose, certains autres systèmes d'exploitation (distributions) gèrent beaucoup mieux.

Chris Lercher
la source
1
Bien que correcte, cette réponse me semble trop verbeuse. Quelqu'un qui demande pourquoi le service d'installation fonctionne de cette façon ne comprendra probablement pas cette réponse.
gWaldo
2
@gWaldo: D'accord, peut-être que vous avez raison ... Là encore, je ne veux pas simplement dire "C'est complexe, croyez-moi (point). Vous ne le comprendriez pas de toute façon". Peut-être que le PO (ou quelqu'un d'autre qui tombe sur cette question) est vraiment intéressé, et une réponse qui va au fond du problème l'aidera à estimer, s'il y a vraiment beaucoup de complexité à résoudre quelque chose qui semble si facile sur son surface. Qui sait?
Chris Lercher
Très vrai. C'est un bon point.
gWaldo
Bien que toutes les discussions sur l'isolement semblent plausibles, vous pouvez exécuter plusieurs programmes d'installation s'ils n'utilisent pas le cadre de Windows Installer. Je n'ai jamais eu de casse lors de l'exécution côte à côte ... Peut-être que j'ai juste de la chance :) En ce qui concerne les installations en file d'attente, il existe des outils pour cela, mais compte tenu des processeurs multicœurs (diable, les processeurs de bureau peuvent désormais exécuter 8 threads) ...), il semble que les exécuter côte à côte serait la réponse (bien qu'ils puissent encore se battre pour les E / S).
Rytis
2
@Rytis: J'aimerais avoir la même chance :-) - J'ai eu des installateurs qui se cassent au hasard même sans les exécuter simultanément. À propos des multicœurs: il y aurait une autre façon de les utiliser: en utilisant plusieurs cœurs dans un même processus d'installation. Ce n'est pas toujours possible ou facile, mais cela peut être beaucoup mieux coordonné. Dans l'ensemble, je pense que le plus gros gain de temps est encore, si l'ensemble du processus d'installation (file d'attente) ne pose des questions qu'au début et à la fin. Ensuite, vous pouvez prendre un café ou faire autre chose pendant l'installation (et utiliser les cœurs restants pour tout ce que vous voulez faire).
Chris Lercher
6

Ceci est de par leur conception, afin d'éviter que deux installations manipulent les mêmes fichiers / dossiers / clés de registre / etc .; cela aurait probablement pu être fait de différentes manières, mais Microsoft a fait ce choix.

Massimo
la source
Une référence pour appuyer votre réclamation?
Aaron Digulla
1

Vous pouvez lancer plusieurs fichiers MSI à installer en séquence rapide l'un après l'autre à l'aide d'un fichier batch. Vous ne pouvez pas exécuter deux fichiers MSI simultanément dans le sens où ils écrivent tous les deux sur le disque en même temps.

La raison en est qu'une partie d'une installation MSI est exécutée comme une "transaction" - une séquence de modifications qui sont soit validées soit annulées selon que les actions de la liste de transactions se terminent sans erreur. Tout doit se terminer sans erreur, puis la transaction est validée, sinon une restauration complète de toutes les modifications se produit. Il s'ensuit qu'une seule de ces transactions peut être active à un moment donné.

Au niveau technique MSI, seules les actions entre les actions standard InstallInitialize et InstallFinalize dans InstallExecuteSequence sont exécutées comme une transaction. Aucune modification du système n'est censée se produire en dehors de ces actions, mais parfois les fichiers MSI sont conçus à tort pour apporter des modifications dans d'autres séquences.

Stein Åsmul
la source