Perché i programmi di installazione di Windows (file .msi) impiegano molto più tempo a disinstallarsi rispetto ad altri programmi di installazione?


31

Sin dai tempi di Windows XP, i programmi di installazione di Windows (file .msi), inclusi i programmi di installazione di InstallShield (che è solo un bootstrap per MSI), hanno richiesto circa cinque volte più tempo per disinstallare un'applicazione rispetto ad altri programmi di installazione. Lo stesso vale di solito anche per l'installazione.

Perché impiegano ancora così tanto tempo e perché le persone usano ancora MSI per l'installazione? Per esempio:

Disinstalla VLC: dura circa 5 secondi.
Disinstalla XYZ: avvia "Preparazione alla rimozione ..." seguito da un ritardo di 15 secondi.

Tutto ciò che sta facendo è rimuovere i file e pulire il registro (che può includere registrazioni COM), quindi perché impiegare così tanto tempo?


Voglio solo notare, questo è vero solo se (1) disabiliti la funzione checkpoint di ripristino del sistema e (2) è un gigantesco programma di installazione (che non è univoco per Windows Installer: ho visto molti programmi di installazione Inno lenti, semplicemente perché sono enormi). Ho avuto installer di Windows installati e rimossi (letteralmente) in una manciata di secondi. (Ad esempio, Bootvis si installa in 3 secondi sul mio sistema. Si disinstalla nello stesso lasso di tempo. E no, anche il mio sistema non è velocissimo.) La differenza è che Windows Installer ha molte più funzionalità, quindi programmi più grandi usalo più spesso.
Mehrdad,

@Mehrdad intendevi (1) abilitare il ripristino del sistema?
Chris S,

Anzi sì, errore di battitura.
Mehrdad,

2
Sono venuto qui perché la disinstallazione di MSI impiegava un'eternità ... e in realtà il motivo era che il pop-up Do you want to allow the following program from an unknown publisher to make changes to this computer?si nascondeva in background.
Nicolas Raoul,

Vedi questa risposta per i dettagli tecnici per accelerare le installazioni MSI: superuser.com/a/296534/11906
Stein Åsmul

Risposte:


32

Il programma di installazione di Windows crea innanzitutto un punto di ripristino del sistema, un'operazione piuttosto lenta.

Anche dall'articolo intitolato, in modo appropriato, "Windows Installer fa schifo" , un estratto:

In passato l'installazione consisteva in un programma in esecuzione e in pochi semplici passaggi per installare il software, quindi fare il contrario alla disinstallazione.

Non è così che funziona Windows Installer. Invece di eseguire un programma per installarlo semplicemente e lasciarlo fare, esamina lo stato del tuo sistema, quindi esamina lo stato del database che è il programma di installazione del programma, quindi esegue una serie di calcoli complicati su come riconciliare i due.

Sembra che, invece di eseguire uno script di installazione, risolva un problema di commesso viaggiatore. Ecco perché funziona così lentamente. O almeno, questa è la mia impressione.

Aggiungo anche che il programma di installazione di Windows conserva tutte le informazioni nel registro, che non è il database più veloce del mondo.


3
Probabilmente è più veloce di quello che dpkgusa per il suo database dei pacchetti (anche se, certamente, dpkg non memorizza tutto al suo interno): /var/lib/dpkg/statusè un file di testo semplice che elenca tutti i singoli pacchetti che erano stati installati una volta e che non sono stati eliminati da allora - e io non sono nemmeno sicuro che ometta sempre quelli purificati.
SamB,

3
dpkgnon mi mente con le barre di avanzamento che dicono "Tempo rimanente: 0 secondi" per due minuti, però ...
LawrenceC

20

Windows Installer ha infatti la reputazione di essere lento. Ci sono alcune cose che contribuiscono a questo e ho intenzione di affrontarle di seguito. Ma alla fine, ci si dovrebbe chiedere se uno, due o tre minuti sono davvero una questione controversa durante l'installazione e la disinstallazione del software. Prendo più tempo di quello sfogliando i canali TV :)

Il registro
Questo è il colpevole numero uno. Windows Installer fa un uso intensivo del registro per le sue operazioni. Man mano che il tuo sistema matura, mentre installi e disinstalli le applicazioni e mentre il registro aumenta di dimensioni o si frammenta, MSI diventerà più lento. La stessa applicazione verrà installata e disinstallata molto più velocemente su un'installazione Windows incontaminata, rispetto a un sistema maturato. La soluzione qui è cercare di mantenere pulito e deframmentato il registro.

Per la pulizia del registro, utilizzare uno dei tanti strumenti disponibili. Ma per la deframmentazione del registro non posso raccomandare abbastanza NTREGOPT per l'ottimizzazione interna dell'alveare e PageDefrag per la deframmentazione dei file fisici.

Il motivo per cui le operazioni MSI potrebbero rallentare il registro ha a che fare con il modo in cui MSI lo utilizza. Windows Installer utilizza il registro per tenere traccia di quali Prodotti hanno installato quali Componenti e in quale Posizione è stato installato. I GUID di installazione originali vengono utilizzati in formato compresso. Le informazioni per macchina relative alle installazioni sono disponibili all'indirizzo HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18, mentre i dati per utente si trovano accanto ad esse su un under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\e su una chiave con il SID dell'utente.

Entrambe queste chiavi possono essere piuttosto grandi e contengono numerose sottochiavi e valori. Controllano prodotti, componenti e KeyPath di ciascuna applicazione installata. Tutte queste informazioni devono essere lette ed elaborate per una corretta procedura di disinstallazione. Tuttavia, il formato del registro elenca le chiavi in ​​ordine alfabetico che consente ricerche binarie. Ma i valori non lo sono. Sono memorizzati man mano che vengono creati, quindi è necessario eseguire una procedura di ricerca lineare. Ciò rallenta le prestazioni dell'algoritmo.

Tutto sommato, MSI è un metodo piuttosto completo e accurato per l'installazione e la disinstallazione del software. Ma soffre della sua dipendenza dal registro. Il sistema è eccellente È il registro di Windows che avrebbe dovuto essere revisionato molto tempo fa :)

Per informazioni più avanzate:
per un'analisi approfondita di ciò che MSI sta facendo durante ciascuna procedura di installazione o disinstallazione, fare riferimento a questo articolo che spiega come impostare MSI Debug. O, per meno ma comunque preziose informazioni, questo come attivare la registrazione.


4
Inoltre, per quanto ne so, MSI utilizza le transazioni per tutto ciò che fa in modo che possa sempre eseguire un rollback corretto ogni volta che un'operazione non riesce. Anche questo probabilmente non contribuisce alla velocità ma è piuttosto essenziale per l'integrità dei dati. (Ho smesso di contare la frequenza con cui ho dovuto ripulire dopo che un programma di installazione NSIS non è riuscito -.-)
Joey,

In questo momento, sto installando OpenOffice ed è già passata quasi un'ora;)
Quiark,

Molto informativo. Io per primo mi sembra di avere spesso errori "Impossibile creare il punto di ripristino" (forse la quota del punto di ripristino è stata raggiunta?) Nei miei registri msi, quindi la creazione di punti di ripristino non ha la possibilità di ostacolare i miei tempi di installazione. Indipendentemente da ciò, i miei tempi di installazione sono ancora lenti e se la ricerca del valore è lenta come dici tu, suppongo che non ci sia alcun motivo da parte di Microsoft di fornire un'implementazione aggiuntiva per ulteriori informazioni foglia / nodo nella specifica binaria del registro per integrare la ricerca binaria.
Chaz

> Ma alla fine, ci si dovrebbe chiedere se uno, due o tre minuti sono davvero una questione controversa durante l'installazione e la disinstallazione del software. Sì.
Alexei Averchenko

6

Il programma di installazione di Windows presenta molti grandi vantaggi per la distribuzione aziendale , alcuni dei quali ho descritto qui: https://serverfault.com/a/274609/20599

Gran parte della lentezza di una sessione di Windows Installer è dovuta alle sue capacità di rollback . Innanzitutto crea un punto di ripristino prima dell'installazione o della disinstallazione (purché il ripristino del sistema non sia stato disabilitato). Quindi eseguirà il backup di tutti i file interessati durante la disinstallazione e l'installazione per garantire che il sistema possa essere ripristinato al suo stato originale in caso di errore.

Un altro fattore che contribuisce è che tutti i componenti dell'MSI saranno registrati nel registro . Ciò comporta un certo sovraccarico .

Per i file MSI compilati è inoltre necessario del tempo per estrarre i file di installazione .

Vedi questa risposta per i dettagli tecnici per accelerare le installazioni MSI .


3

Gli installatori di Windows sono così comunemente usati per molti motivi: integrazione del sistema operativo, criteri di sicurezza, installazioni non presidiate e molto altro.

Il motivo più comune a cui riesco a pensare sono le installazioni incustodite e le distribuzioni di rete. Le grandi aziende possono distribuire facilmente le applicazioni, avendo il file .MSI su un'unità di rete e quindi semplicemente chiamando un file batch (o applicazione della procedura guidata di distribuzione) su un computer remoto per automatizzare il processo di installazione.

Mentre esistono altre opzioni al di fuori dei file .MSI, ci sono alcune caratteristiche uniche che si integrano con la maggior parte delle versioni di Windows che molti altri installatori non hanno.

E proprio per questo lo sai: InstallShield non è sempre un front-end per i file MSI. Hanno anche una propria soluzione di installazione proprietaria.


1
La domanda era: perché MSI impiega così tanto tempo a fare qualcosa, rispetto ai programmi di installazione .exe puri.
Grawity,

5
Dalla domanda ... "e perché le persone usano ancora MSI per l'installazione?"
Breakthrough

@grawity: tecnicamente, gli installer di msi possono essere impacchettati anche in exe, ma questo probabilmente sta dividendo i capelli.
music2myear,
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.