Perché Windows Installer può installare un solo programma alla volta?


10

Mi sono sempre chiesto perché Windows Installer ti permetta di installare un solo programma alla volta. È molto frustrante non poter avviare più installazioni, soprattutto quando si configura una nuova installazione di Windows. Qual è la ragione?

Risposte:


6

Sarebbe molto complesso garantire la correttezza quando si verificano installazioni simultanee, supponendo che condividano alcuni dei file. Ciò richiederebbe una qualche forma di transazione.

  • Devi bloccare i file
  • Dovrebbe essere possibile annullare le modifiche intermedie, se l'installazione non riesce (non sei sicuro, se è possibile ora?)

Questi concetti sono noti dai database transazionali, ma l'argomento non è banale e di solito non si trova un'infrastruttura completamente transazionale nei file system (anche se i file system di journaling ne forniscono una parte). Un problema è che più blocchi possono portare a un deadlock, quindi è necessario il rilevamento di deadlock (o entrambi gli installer si bloccheranno per sempre) e un modo per gestirlo. I deadlock possono essere evitati (ad esempio bloccando sempre i file nello stesso ordine), ma ci sono altri problemi:

Se blocchi tutti i file richiesti in anticipo, ottieni effettivamente quello che hai: un programma di installazione deve attendere fino al termine dell'altro. Se non si bloccano tutti i file richiesti in anticipo e si continua, si rischia che la "transazione" fallisca. Ciò significherebbe che uno degli installatori dovrebbe essere riavviato.

Quindi potresti dover pensare ai livelli di isolamento delle transazioni - per essere completamente corretti, le tue transazioni dovrebbero essere "serializzabili" - ma non è facile, anche per molti database.

Potrebbero anche esistere strategie alternative per affrontare i problemi, che eludono il completo isolamento, ma di solito sarebbe ancora più difficile dimostrare la loro correttezza.

Credo che, con l'installazione simultanea, avremmo problemi post-installazione molto più intrattabili, soprattutto perché non credo, un fornitore del sistema operativo (o una distribuzione) avrebbe dovuto affrontare tutti i problemi per renderlo pulito al 100%. Quindi preferirei non usarlo, anche se fosse offerto dal sistema operativo.

Nota

Ma forse quello che vuoi davvero non è nemmeno l'installazione "allo stesso tempo". Forse sarebbe sufficiente, se potessi mettere in coda le installazioni, che vengono quindi eseguite una dopo l'altra (idealmente senza fare domande in mezzo). E questo è davvero qualcosa, alcuni altri sistemi operativi (distribuzioni) gestiscono molto meglio.


1
Sebbene corretta, questa risposta mi sembra troppo dettagliata. Qualcuno che chiede perché il servizio di installazione funziona così non è probabile che capisca questa risposta.
gWaldo,

2
@gWaldo: Okay, forse hai ragione ... E poi, non voglio solo dire "È complesso, credimi (punto). Non lo capiresti comunque". Forse l'OP (o qualcun altro inciampare in questa domanda) è veramente interessato e una risposta che arriva in fondo al problema lo aiuterà a stimare, se c'è davvero molta complessità per risolvere qualcosa che sembra così facile sulla sua superficie. Chissà?
Chris Lercher,

Verissimo. È un buon punto.
gWaldo,

Mentre tutte le discussioni sull'isolamento sembrano plausibili, è possibile eseguire più programmi di installazione se non utilizzano il framework di Windows Installer. Non ho mai avuto nessuna di queste interruzioni quando correvo fianco a fianco ... Forse sono solo fortunato :) Per quanto riguarda le installazioni in coda, ci sono strumenti per questo, ma date le CPU multicore (diamine, le CPU desktop ora possono eseguire 8 thread ...), sembra che gestirli fianco a fianco sarebbe la risposta (anche se possono ancora lottare per l'I / O).
Rytis,

2
@Rytis: Vorrei avere la stessa fortuna :-) - Ho fatto rompere gli installatori in modo casuale anche senza eseguirli contemporaneamente. Informazioni sui multicore: esiste un altro modo per utilizzarli: utilizzando più core in un processo di installazione. Questo non è ancora sempre possibile o facile, ma può essere coordinato molto meglio. Nel complesso, penso che il risparmio di tempo maggiore sia ancora, se l'intero processo di installazione (coda) pone domande solo all'inizio e alla fine. Quindi puoi prendere un caffè o fare qualcos'altro mentre l'installazione è in esecuzione (e utilizzare i core rimanenti per qualsiasi cosa tu voglia fare.).
Chris Lercher,

6

Questo è di progettazione, al fine di evitare che due installazioni manipolino gli stessi file / cartelle / chiavi di registro / ecc .; probabilmente avrebbe potuto essere fatto in diversi modi, ma Microsoft ha fatto questa scelta.


Qualche riferimento a supporto del tuo reclamo?
Aaron Digulla,

1

È possibile eseguire il kicking di più file MSI da installare in rapida sequenza uno dopo l'altro utilizzando un file batch. Non è possibile eseguire due file MSI contemporaneamente, nel senso che entrambi scrivono contemporaneamente su disco.

Il motivo è che parte di un'installazione MSI viene eseguita come una "transazione", una sequenza di modifiche che vengono confermate o ripristinate a seconda che le azioni nell'elenco delle transazioni vengano completate senza errori. Tutto deve essere completato senza errori, quindi la transazione viene impegnata, altrimenti si verifica un rollback completo di tutte le modifiche. Ne consegue che solo una di tali transazioni può essere attiva in un dato momento.

A livello di MSI tecnico, solo le azioni tra le azioni standard InstallInitialize e InstallFinalize in InstallExecuteSequence vengono eseguite come transazione. Nessun cambiamento di sistema dovrebbe avvenire al di fuori di queste azioni, ma a volte i file MSI sono erroneamente progettati per apportare modifiche in altre sequenze.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.