I vantaggi aziendali dell'utilizzo dei file MSI


57

Quali sono i vantaggi dell'utilizzo dei file .msi rispetto ai normali file setup.exe?

Ho l'impressione che la distribuzione sia più semplice su macchine in cui gli utenti dispongono di poche autorizzazioni, ma non sono sicuro dei dettagli.

Quali caratteristiche ha msiexec.exe che rende la distribuzione più semplice rispetto all'utilizzo degli scenari setup.exe?

Suggerimenti o trucchi durante la distribuzione di applicazioni .msi?

Risposte:


42

Solo alcuni vantaggi:

  • Può essere pubblicizzato (in modo che l'installazione su richiesta possa avvenire).
  • Come la pubblicità, le funzionalità possono essere installate non appena l'utente tenta di utilizzarle.
  • La gestione dello stato viene mantenuta, quindi Windows Installer fornisce un modo per consentire agli amministratori di vedere se un'applicazione è installata su un computer.
  • Possibilità di ripristinare se l'installazione non riesce.

Penso a quando sto distribuendo software in un ambiente aziendale: distribuire software tramite MSI è quasi divertente. Al contrario, mi trovo quasi sempre a temere di distribuire software quando si trova in un altro contenitore.

Per alcune informazioni aggiuntive sulla manipolazione delle installazioni MSI, digitare msiexecnella finestra di dialogo Esegui.


3
+1 - Non l'ho visto nel '09 (penso che il sito potrebbe essere stato ancora in beta allora), ma adoro il bit "... Mi ritrovo quasi sempre a temere ...". Mi sento totalmente in quel modo (anche se, per essere onesti, alcuni "MSI" mi fanno sentire allo stesso modo ... Java ... Google Chrome ...).
Evan Anderson,

74

AGGIORNAMENTO, luglio 2018 : un riepilogo estremamente compresso delle informazioni seguenti è disponibile su StackOverflow: i principali vantaggi dell'MSI ( "executive summary"- di sorta).


Ho lavorato nello sviluppo come responsabile del rilascio , ingegnere di costruzione , sviluppatore di installazione e come impacchettatore di applicazioni e ingegnere di distribuzione in grandi aziende.

Questa è una recensione delle migliori (e peggiori) caratteristiche concettuali e reali dell'MSI. I problemi di progettazione più comuni riscontrati nei file MSI sono presentati come una risposta separata di seguito . Non pretendere di essere completo - in realtà solo una "confusione di cervelli" disordinata - intesa come "quella roba che non si trova nei libri" (probabilmente per una buona ragione).

Vorrei anche suggerire questo articolo MSDN come una buona lettura: Windows Installer: vantaggi e implementazione per gli amministratori di sistema .


Standardizzazione:

In una parola, MSI riguarda la standardizzazione e la gestione degli " odori di distribuzione " delle tecnologie di installazione legacy. Un'intera raccolta di cattivi progetti di architettura di installazione che hanno causato ripetuti problemi di distribuzione.

Nel complesso MSI fornisce un framework completo e standardizzato per l'installatore, che include anche le funzionalità di disinstallazione e integrate e le opzioni per l' esecuzione silenziosa con la GUI standardizzata che può essere attivata da remoto .

Queste funzionalità da sole costituiscono un enorme miglioramento rispetto alle precedenti tecnologie di installazione che trattavano la disinstallazione e l'esecuzione silenziosa a casaccio - forse le funzionalità più importanti per l'implementazione aziendale insieme alla gestione affidabile dei pacchetti remoti tramite Active Directory o strumenti di amministrazione remota dedicati come Microsoft SCCM (precedentemente SMS), IBM Tivoli , CA Unicenter e simili.

Qualcuno ha duplicato una versione precedente di questa risposta . Forse una lettura più veloce?


Installatori legacy "Odori di distribuzione"

MSI scoraggia attivamente gli odori della distribuzione legacy in base alla progettazione. Questi argomenti sono discussi nelle sezioni successive di seguito, ma come elenco rapido i problemi più riconoscibili con gli installatori legacy e la tecnologia di distribuzione precedente erano:

  • 1) a volte hanno effettuato il downgrade e sovrascrivono i file condivisi e versionati con poca preoccupazione per l' inferno dll che ne è derivato
  • 2) spesso non è stata fornita una corretta routine di disinstallazione fornita con il programma di installazione o non è stata completata correttamente e in modo affidabile, in particolare se eseguita in modo silenzioso. Questo è un grosso problema per la gestione SOE aziendale
  • 3) l' installazione silenziosa è stata raramente supportata correttamente. L'affidabilità era scarsa e spesso si doveva registrare un'esecuzione dell'installazione con le selezioni delle finestre di dialogo e questo non gestiva bene condizioni impreviste come finestre di dialogo di errore o finestre di avviso che non erano state registrate nell'esecuzione originale
  • 4) il programma di installazione non ha tenuto traccia di ciò che è stato installato e quindi non esiste un modo automatico per verificare i file sul disco per verificare se fossero ancora le versioni installate originariamente dal programma di installazione
  • 5) presentavano parametri della riga di comando imprevedibili, inaffidabili e non standard per l'eseguibile dell'installazione
  • 6) in seguito alla riga di comando non standard e alla mancanza di standard era difficile personalizzare gli installatori con valori specifici necessari per l'implementazione aziendale in modo affidabile e prevedibile
  • 7) gli utenti normali non potevano eseguire queste installazioni, e spesso si doveva fare un giro con i diritti di amministratore temporanei (usare "esegui come" se ciò era sufficiente, oppure accedere come amministratore, installare e quindi disconnettersi - questa generazione completa di accesso e profilo a volte era necessario per il completamento dell'installazione)
  • 8) il programma di installazione setup.exe spesso non restituiva un codice di errore o un codice di successo corretto , e talvolta usciva immediatamente e avviava un altro processo che completava l'installazione rendendo difficile determinare se l'installazione è stata completata, soprattutto tramite un batch file
  • 9) la maggior parte dei file setup.exe ha permesso di estrarre i file, ma non in modo affidabile e prevedibile - in genere è stato necessario impiegare molto tempo a trovare gli interruttori giusti per farlo
  • 10) la registrazione era generalmente scarsa e piuttosto casuale in alcuni strumenti. Il debug con i file di registro raramente ha prodotto chiarezza, ma ha aiutato un po '
  • 11) non c'era trasparenza in ciò che stava facendo l'installatore e nessun rollback inaffidabile per annullare le modifiche dopo un'installazione fallita
  • 12) non vi era alcun modo standard del settore di distribuzione di componenti di runtime condivisi se sono stati componenti del sistema operativo, componenti di terze parti o il proprio

L'elenco continua con molti altri difetti di distribuzione cruciali e riconosciuti . Ovviamente è stato nel mondo della distribuzione aziendale che questi problemi sono emersi più spesso e ha portato al business del " reimballaggio dell'applicazione " in cui un installatore legacy viene catturato con tecnologie di scansione del disco e del registro al fine di creare un file MSI conforme agli standard per una distribuzione affidabile.

Il riconfezionamento delle applicazioni è un lavoro specialistico e generalmente genera file MSI di qualità eccellente se eseguiti da persone competenti, ma non è possibile riconfezionare tutte le applicazioni a causa della complessa logica di registrazione che deve essere eseguita in modo interattivo affinché determinate applicazioni funzionino.


Vantaggi MSI: breve riepilogo

In parole povere i vantaggi davvero importanti dell'MSI sono (in nessun ordine particolare):

  • 1) la disinstallazione è sempre disponibile per ogni pacchetto a meno che non sia disabilitato attivamente
  • 2) questo è lo stesso per la registrazione , che è ottima e standardizzata, anche se dettagliata (strumenti come WiLogUtl.exe possono essere utilizzati per analizzare i file di registro)
  • 3) ciò che fa un file MSI è (semi) trasparente o "ispezionabile" per la maggior parte. L'eccezione sono le azioni personalizzate - (vedere la sezione sulla trasparenza di seguito)
  • 4) la personalizzazione dell'installazione avviene in modo standardizzato ( trasforma )
  • 5) non è necessario incasinare i diritti di amministratore temporanei poiché l'installazione viene eseguita tramite pubblicità di Active Directory, criteri di gruppo o amministrazione remota. Alcune qualifiche qui. Vedi anche questa schermata dall'editor degli oggetti dei criteri di gruppo.
  • 6) installazione / disinstallazione invisibile all'utente tramite strumenti di gestione o utilizzo di msiexec.exe funziona bene
  • 7) esiste un supporto completo per il rollback delle installazioni non riuscite. Se si installa manualmente sulla confezione, ci sono alcune qualifiche che è necessario conoscere.
  • 8) il file MSI si presta sia all'ispezione che alla validazione per coerenza e validità logica poiché sono conformi a uno schema di database ( vedi esempio di validazione )
  • 9) gli aggiornamenti sono tipi standardizzati, sebbene complessi e spesso soggetti a errori per i packager inesperti
  • 10) l' estrazione di file da msi è una funzione integrata (consultare l'articolo collegato per una buona panoramica rapida)
  • 11) la riga di comando di Windows Installer, msiexec.exe , offre un controllo molto preciso di come eseguire la sequenza di installazione e tutte le opzioni funzionano con tutti i file MSI conformi agli standard (impostare il livello di registro, eseguire in modo silenzioso / interattivo / semi-silenzioso , impostare i parametri di installazione, applicare trasformazioni ecc ...).
  • 12) unire i moduli è il meccanismo MSI per la consegna di file condivisi con più pacchetti MSI. È un modulo consumabile o un bundle di logica di installazione unibile a qualsiasi pacchetto MSI al momento della compilazione. Wix si è esteso e migliorato su questo concetto con l'uso dei file include Wix - un concetto che secondo me è superiore all'unione di moduli - specialmente per i tuoi file (cioè non i file del sistema operativo)
  • 13) lo stesso motore di installazione di Windows presenta un meccanismo per impedire la sovrascrittura di file con versione o modificati durante l'installazione. Questo è controllato da una logica di sostituzione dei file piuttosto complessa . Sebbene efficiente e buona, la logica può finire per essere un problema in sé e per sé poiché molti sviluppatori affrontano il problema di non essere in grado di sovrascrivere i loro file di configurazione modificati durante l'aggiornamento. La soluzione a questi problemi sono generalmente lievi cambiamenti nella progettazione delle applicazioni per evitare schemi di distribuzione comuni , sebbene questa sia una grande discussione a sé stante.

Nel mondo reale ho trovato aspetti meno riusciti tra cui patching (molto complesso), MSI-GUI (funzionalità semplici, abbastanza complesse, prive di flessibilità), resilienza (può causare il debug difficile da ripetere ripetendo problemi di auto-riparazione ) e la complessità complessiva di gestire la tecnologia per i principianti (elevata complessità delle operazioni di base a volte - ad esempio aggiornamenti, GUI e i numerosi dettagli interagenti causano risultati imprevisti ecc ...). La velocità del processo di installazione ha anche rallentato notevolmente a causa del maggiore sovraccarico di MSI. Consulta alcuni suggerimenti per migliorare la velocità di installazione di MSI .

Il resto del testo tratta alcuni di questi aspetti dell'MSI in modo più dettagliato.


Trasparenza (formato di installazione aperto)

Un file MSI è essenzialmente un database SQL Server Server ridotto come un file di archiviazione strutturato COM, essenzialmente un file system in un file o una raccolta di flussi di dati. Questo è il tipo di file utilizzato nei documenti di Microsoft Office e produce un formato standard che può essere rivisto e ispezionato , un grosso problema per le grandi aziende.

Ad eccezione delle azioni personalizzate compilate, un file MSI è una casella bianca . Se l'installazione cambia qualcosa di folle come le impostazioni di rete a livello di sistema, puoi effettivamente vederlo utilizzando gli strumenti appropriati . L'eccezione notevole sono le azioni personalizzate compilate, che sono scatola nera . I requisiti del logo di Windows richiedono che le azioni personalizzate vengano annotate per spiegare cosa stanno facendo, ma questo viene spesso ignorato dagli sviluppatori dell'installazione. Spero che l'avvento di Wix migliorerà questo.

Per determinare cosa fanno effettivamente tali azioni personalizzate compilate in senso tecnico, è necessaria un'acquisizione di installazione . Questo non è quasi mai stato fatto nella mia esperienza. È più comune contattare il fornitore per informazioni se il software necessita dell'approvazione per l'implementazione aziendale e quindi potrebbe essere l'applicazione stessa a impedirne l'uso e non solo l'installazione.

Personalizzabilità (trasforma)

Un MSI può essere personalizzato tramite trasformazioni per adattarsi alle esigenze e agli standard di un'organizzazione, pur consentendo l'interoperabilità con gli aggiornamenti del programma di installazione del fornitore. Non si modifica il programma di installazione stesso, si crea la personalizzazione in un file separato e specifico dell'organizzazione chiamato Transform (file .mst) (un frammento del database o modifica transazione se lo si desidera). Sei libero di disabilitare le azioni personalizzate e in generale di modificare, sovrascrivere o disabilitare qualsiasi cosa nel programma di installazione e puoi anche aggiungere nuove cose, inclusi i file. I file di trasformazione vengono talvolta utilizzati anche per localizzare un file MSI in diverse lingue. Diverse trasformazioni possono essere applicate a un singolo MSI, ecco un esempio con percorsi troncati :

msiexec.exe /I "My.msi" /QN /L*V "C:\My.log" TRANSFORMS="C:\1031.mst;C:\My.mst"

Spiegazione rapida dei parametri:

/QN = run completely silently
/L*V "C:\My.log"= verbose logging
TRANSFORMS="C:\1031.mst;C:\My.mst" = Apply transforms 1031.mst and My.mst.

Gestione e relazioni

Windows Installer mantiene un database completo di tutti gli elementi che un prodotto ha installato nel registro ( HKEY_CLASSES_ROOT \ Installer : non modificare mai nulla qui direttamente! Lo stesso vale per gli esperti).

È possibile determinare in modo affidabile se un prodotto è installato, quali funzionalità sono state installate e quali versioni di file sono state installate. Inoltre, è possibile ottenere un elenco di eventuali patch che sono state applicate al prodotto di base, se presenti. È possibile accedere a questo database tramite API che supportano Win32, COM o .NET utilizzando una varietà di strumenti di scripting, configurazione e amministrazione come Microsoft SCCM , IBM Tivoli , CA Unicenter ecc ...

Sicurezza (diritti elevati temporanei)

MSI comprende anche i principi dei "diritti elevati" che consentono a un utente con restrizioni di avviare l'installazione di un prodotto che richiede l'installazione dei diritti di amministratore. Questo fa parte della " funzione di annuncio " che consente a un amministratore di rendere disponibili gli installatori agli utenti senza installarli su tutte le workstation. L'installatore stesso deve essere correttamente creato su diversi account di base affinché questo concetto di diritti elevati funzioni correttamente. Gli utenti possono attivare autonomamente l'installazione del prodotto oppure l'installazione può essere controllata da un sistema di distribuzione dedicato come SCCM, Tivoli, Unicenter (normalmente le società più grandi). Non è necessario pasticciare con i diritti di amministratore temporanei per far funzionare le cose che è spesso il caso degli installatori legacy.

L'ampio database di installazione garantisce inoltre una panoramica completa delle patch installate e quindi la possibilità di rilevare vulnerabilità della sicurezza tramite strumenti di automazione e di amministrazione.

Validazione

I file MSI possono essere controllati con regole di convalida per assicurarsi che sia conforme a una serie di regole di coerenza interne (denominate ICE). Le società possono creare i propri controlli ICE per applicare regole e requisiti aziendali speciali. Questo aiuta molto con il QA. Il motivo per cui la convalida è possibile è dovuto alla natura autoreferenziale dei database relazionali e allo schema del database associato. Il database deve essere internamente coerente e conforme al proprio schema per quanto riguarda le chiavi esterne, i tipi di dati, l'ampiezza del campo, la versione dello schema, ecc ... Anche la convalida va oltre questo ed è in grado di rilevare autentici difetti logici ed errori nel pacchetto , non solo formattare e digitare difetti. Ad esempio, è in grado di rilevare file o tipi di file che vengono distribuiti in destinazioni di destinazione errate.

Resilienza (autoriparazione)

La funzione di installazione dell'amministratore di Windows Installer fornisce un modo standard per estrarre i file di origine da un MSI ( ecco alcune informazioni aggiuntive su questo argomento ). Questi file di origine possono quindi essere inseriti in una condivisione ed essere disponibili per tutte le workstation per l'installazione. Ciò garantisce il completamento delle operazioni di riparazione, disinstallazione e modifica senza richiedere il supporto di installazione su CD o simili. Ciò è particolarmente importante per le operazioni di patching e aggiornamento che potrebbero richiedere l'accesso ai file sorgente delle vecchie versioni in circostanze speciali.

Esistono anche problemi comuni con questa funzionalità di resilienza. La maggior parte degli amministratori ha sperimentato macchine con cicli ciclici di autoriparazione che non sembrano mai fermarsi. Segui il link per un lungo elenco di cause di questo problema. E ancora, ecco una versione più breve che potrebbe essere più facile da leggere.

Rollback

L'installazione di un file MSI normalmente attiverà la creazione di un punto di ripristino . Inoltre, tutti i file e gli elementi del registro sostituiti o sovrascritti durante l'installazione verranno salvati e ripristinati se l'installazione non viene completata, salvo eventuali modifiche apportate nelle azioni personalizzate.

Le azioni personalizzate devono implementare il proprio supporto di rollback per la conformità del logo Windows. Questo viene spesso ignorato, ma comporta la creazione di una seconda azione personalizzata per annullare le modifiche apportate dall'azione personalizzata principale.

Il rollback garantisce che la workstation rimanga in uno stato stabile anche se l'installazione non dovesse riuscire. Lo script di rollback effettivo viene archiviato in una cartella nascosta direttamente sull'unità di sistema, generalmente C: \ Config.MSI , e contiene file con estensione .RBS e .RBF - File di script di rollback . Come ci si potrebbe aspettare, i file MSI mal progettati possono violare le funzionalità integrate di Windows qui, vedere il mio altro post in questa discussione per maggiori dettagli.

Esistono modi per disabilitare il rollback e accelerare l'installazione. Non generalmente consigliato, ma qui ci sono dettagli sulla proprietà MSIFASTINSTALL e DISABLEROLLBACK . Questa è una funzionalità complicata, ma ecco una rapida panoramica del rollback .

Patch e aggiornamenti

Sebbene estremamente complesso, l'applicazione di patch in Windows Installer è completamente gestita e registrata sul sistema in modo che uno stato di sicurezza del sistema possa essere determinato controllando ciò che è stato installato. Gli aggiornamenti sono standardizzati in alcune varianti di base e ciò consente di eseguire gli aggiornamenti con un livello più elevato di certezza, purché tu sia in grado di gestire la complessità. I sistemi di distribuzione saranno in grado di segnalare quali aggiornamenti non sono riusciti e perché.

Dal punto di vista soggettivo, il patching funziona bene per 2 usi di base : 1 ) piccoli aggiornamenti rapidi per i prodotti consegnati e 2 ) patching di un prodotto installato per correggere la sequenza di disinstallazione difettosa che impedisce una disinstallazione pulita dei prodotti.

Una patch è solo un meccanismo di consegna per un aggiornamento che sta già funzionando . In quanto tale, è solo un contenitore che è più complicato e soggetto a errori rispetto all'impostazione originale stessa. La regola numero uno per una patch è che deve essere più piccola dell'MSI originale o non vi è alcuna ragione ovvia per consegnare una patch. Una patch può diventare enorme rapidamente se ha come target più versioni del prodotto.

Registrazione (davvero dettagliata)

Windows Installer offre una funzionalità di registrazione standardizzata che è notevolmente superiore alle precedenti incarnazioni, sebbene quasi eccessivamente dettagliata. I file di registro possono essere decifrati utilizzando gli analizzatori di registro e possono essere utilizzati livelli di registro personalizzati per eliminare la generazione di file di registro troppo grandi con informazioni non necessarie. Ai fini del debug la registrazione dettagliata è estremamente utile. Vedi il blog di Rob Mensching per un buon modo manuale per leggere un file di registro MSI (essenzialmente cerchi " valore 3 " nel file di registro). Ecco una riga di comando di esempio che esegue la registrazione dettagliata:

msiexec.exe /I "C:\Installer.msi" /QN /L*V "C:\msilog.log"

Questo articolo di Robert Macdonald del team di Windows Installer è altamente raccomandato come uno sguardo pratico alla registrazione MSI: Come interpretare i registri di Windows Installer .


Conclusione

Non tutto va bene con Windows Installer . La sua complessità può essere sconcertante a volte, ma per le grandi aziende i file MSI sono di gran lunga superiori a qualsiasi altra forma di distribuzione quando si prende in considerazione l'elenco dei vantaggi sopra.

Nuovo paradigma del programma di installazione (l'enorme istruzione SQL)

Per comprendere il nuovo " paradigma " è importante capire che MSI è inteso come una descrizione dichiarativa di ciò che accadrà sul sistema di destinazione, piuttosto che una sequenza fissa di eventi. Suppongo che tu possa pensarlo come un'enorme istruzione SQL . Ad esempio, dichiari gli elementi che desideri aggiungere o modificare in un file INI. Durante l'esecuzione dell'installazione, le modifiche vengono monitorate e il rollback è disponibile in modo che le modifiche possano essere ripristinate se l'installazione non riesce. Funziona davvero come " automagic " ed è affidabile se fatto bene.

Azioni personalizzate (i soliti sospetti)

È un enorme mal di testa per gli sviluppatori MSI esperti vedere le persone fare affidamento su azioni personalizzate complesse e inaffidabili per funzionalità che è meglio implementata con le funzionalità MSI integrate. Una quota significativa di tutti gli errori MSI e i problemi di rollback sono causati da azioni personalizzate errate e la maggior parte degli altri errori sono causati da un uso errato del design MSI (vedere la risposta separata per l'elenco degli errori MSI comuni).

Oltre alle funzionalità MSI integrate, sono ora disponibili sempre più funzionalità personalizzate tramite un nuovo framework come Wix , il modo XML per compilare i file MSI, quindi c'è sempre meno bisogno di complesse logiche di azioni personalizzate per la maggior parte delle operazioni.

MSI offre il pieno supporto per la gestione della fusione di impostazioni di file ini, caratteri, variabili di ambiente, chiavi di registro, informazioni COM, collegamenti, estensioni di file, condizioni di avvio, installazione di GAC, ODBC, ecc ...

WIX va oltre con il supporto di funzionalità molto avanzate come estensioni del server SQL, installazioni e configurazione IIS, contatori delle prestazioni, controllo DirectX e altre attività correlate al gioco, generazione di immagini native .NET, COM +, driver, regole del firewall, estensioni di PowerShell, chiusura delle applicazioni, gestione di utenti, gruppi, condivisioni e molto altro. Un po 'coinvolto, ma molto più affidabile delle tue azioni personalizzate.

Evitare azioni personalizzate a tutti i costi, se possibile

Per cercare di metterlo in prospettiva: queste soluzioni integrate e pronte sono realizzate dai migliori esperti di distribuzione disponibili e sono testate da migliaia, decine di migliaia o forse anche milioni di utenti (per roba integrata in MSI si). Pensi davvero di poter fare meglio facendo le tue azioni personalizzate? L'uso di un'azione personalizzata dovrebbe essere un evento raro e dovrebbe essere assolutamente necessario ottenere qualcosa di unico per il prodotto installato . E devi anche scrivere il supporto di rollback adeguato, il che è abbastanza coinvolto.

Scrivere un'azione personalizzata è quasi sempre un errore , ma ci sono casi autentici in cui anche tu hai davvero bisogno della flessibilità. Come sempre è importante scegliere bene le tue battaglie. All'inizio potrebbe essere un compito divertente, ma probabilmente dovrai affrontare molti problemi imprevisti e perdere molto tempo costoso. Lo dico molto sul serio. Ho scritto una serie di azioni personalizzate in C ++ per uso aziendale (per eliminare le azioni personalizzate VBScript soggette a errori): non è una passeggiata nel parco e, sebbene la codifica possa non essere la più difficile al mondo, il debug e i test e il collegamento a un vero file MSI è a dir poco estremamente coinvolto. Un po 'di tempo alla ricerca di quali opzioni pronte sono disponibili probabilmente ti farà risparmiare settimane di lavoro di sviluppo e produrrà un'affidabilità di implementazione molto maggiore.

Utilizzare la sequenza di avvio dell'applicazione

Un punto molto importante è che molta configurazione dell'applicazione dovrebbe avvenire all'avvio dell'applicazione quando si dispone di un contesto di runtime prevedibile e di una buona gestione degli errori, e non nell'impostazione che viene eseguita una sola volta e presenta rappresentazione , sequenziamento , condizionamento e runtime molto complicati complessità .

La tua installazione non dovrebbe configurare l'applicazione, dovrebbe preparare l'applicazione per la configurazione al primo avvio . In particolare, l'installazione dovrebbe scrivere tutte le impostazioni che richiedono diritti elevati : scrittura su HKLM, registrazione dei servizi, installazione su percorsi per computer e qualsiasi cosa che un'applicazione non possa scrivere da sola con i diritti utente regolari.

Se sei uno sviluppatore dell'installazione, dovresti offrirti di impegnarti a codificare la sequenza di avvio dell'applicazione invece di scrivere azioni personalizzate di installazione . Se non altro, per evitare di sembrare come se stessi cercando di "passare il dollaro" a qualcun altro. In questa sequenza di lancio è possibile scrivere un codice molto più affidabile e testabile, che è più facile ottenere assistenza dal personale addetto al controllo qualità da testare (spesso non comprendono i test di distribuzione così come i test delle applicazioni).

Complessità dell'installazione

Il nucleo della complessità dell'installazione è incentrato sul fatto che gli errori sono cumulativi (si sta gestendo un processo di consegna, non solo una rapida ricompilazione), gli errori sono molto difficili da eseguire il debug (nessun accesso ai sistemi in cui si verificano gli errori) e al sistema di destinazione gli stati differiscono in quasi tutti i modi immaginabili . Si prega di vedere questa risposta per una discussione più approfondita di questa complessità e di come i sistemi target potrebbero diffidare in un numero sconvolgente di modi: Windows Installer e la creazione di WiX e The Complexity of Deployment (vedi verso il basso).

WiX (la migliore soluzione MSI per alcuni scopi)

Leggi questa rapida introduzione di WiX per una descrizione del nuovo modo basato su XML per compilare file MSI. I file di origine basati su testo forniscono un controllo del codice sorgente molto migliore rispetto a prima. Questo è un toolkit gratuito e open source altamente raccomandato .

NB : vedere altrove nel thread per una rapida panoramica dei comuni problemi di progettazione con i file MSI: è molto incompleto, ma vale la pena leggerlo. Non volevo aggiungerlo a questa risposta poiché non è correlato al 100%, ma per l'uso nel mondo reale è un argomento cruciale.


Alcune informazioni MSI fondamentali per gli amministratori di sistema:

(scusate la "promozione" spudorata - è per un facile accesso e recupero)

Ecco alcuni link ad argomenti che potrebbero essere utili agli amministratori di sistema nel loro sforzo di controllare la distribuzione sulle loro reti:

Argomenti speciali:

Argomenti concettuali / Best practice:


24

Questa risposta è in gran parte un lavoro in corso e una struttura approssimativa. Aggiunte, domande e aggiornamenti sono benvenuti. Questo elenco non è affatto esaustivo. Aggiungi un commento con informazioni sui pacchetti problematici.


Problemi tipici e difetti di progettazione visti nei pacchetti MSI

Devo anche avvertire che molti file MSI contengono errori, a volte gravi, ma i pacchetti di applicazioni addestrati saranno in grado di rilevare questo e nella maggior parte dei casi eliminare il problema. Sto aggiungendo questo come una risposta separata poiché essenzialmente risponde a una domanda diversa, ma ritengo sia rilevante nella stessa discussione.

I dettagli tecnici coinvolti nell'MSI sono molto complicati . A livello base si tratta di scomporre i file e le impostazioni del registro in componenti (installazione atomica) e funzionalità (parti dell'applicazione selezionabili dall'utente da installare, ad esempio una funzione di dizionario). Esistono numerose regole di best practice per la suddivisione dei componenti e gli errori nei file MSI qui sono numerosi. Questi errori vengono generalmente gestiti standardizzando l'uso di "aggiornamenti importanti".

L'installazione effettiva viene eseguita in diverse sequenze di installazione, alcune con diritti elevati . Tutte queste cose sono definite nelle tabelle del database, ed è qui che MSI è terribilmente complicato da capire e gestire. Diffusione nelle sequenze di installazione sono azioni standard e personalizzate. Le azioni standard sono progettate da Microsoft e devono essere eseguite (a volte la sequenza può essere modificata). Sono disponibili azioni personalizzate per i fornitori per eseguire logiche personalizzate non coperte dallo stesso MSI. Questi possono essere in forma di script o compilati. Le azioni personalizzate possono essere immediate (eseguite contemporaneamente, non devono cambiare il sistema ma spesso lo fanno) o differite (scritte in uno script di esecuzione che viene quindi eseguito come una transazione e quindi a supporto del rollback).

Gli errori tipici in un MSI sono (in nessun ordine particolare - e presentati come un vero casino):

  • errori di creazione dei componenti (non seguendo le migliori pratiche). Ciò può causare problemi di patch e aggiornamenti con sintomi misteriosi come file e impostazioni mancanti o patch che esplodono con errori senza senso. Per semplificare eccessivamente si dovrebbe usare un file per componente a meno che il numero di file sia enorme.
  • aggiornare i problemi relativi alla sovrascrittura o al ripristino dei dati dell'utente. Vedi maggiori dettagli di seguito.
  • la pianificazione errata delle azioni personalizzate al di fuori della "sezione trattata" delle sequenze di installazione o le azioni personalizzate di tipo errato sono posizionate in modo errato. Questo spesso causa il fallimento delle azioni (nessun diritto elevato) quando viene eseguito in remoto tramite sistemi di distribuzione e il rollback viene efficacemente paralizzato perché vengono ripristinate solo le azioni eseguite. La transazione di Windows Installer (pensa al commit delle transazioni del database) viene eseguita tra le azioni standard InstallInitialize e InstallFinalize nella sequenza di installazione principale e viene eseguita con diritti elevati . Tutte le modifiche al sistema devono avvenire in questa transazione - qualsiasi altra cosa è errata (ma sfortunatamente abbastanza comune).
  • utilizzo di azioni personalizzate in modalità immediata per apportare modifiche al sistema al di fuori della sequenza di installazione eseguita . Ciò interrompe il supporto del rollback e in genere provoca errori di sicurezza poiché le azioni personalizzate in modalità immediata non vengono eseguite con diritti utente elevati, indipendentemente da dove si trovano nelle sequenze di installazione.
  • progetti errati che causano cicli ripetitivi di autoriparazione senza una ragione ovvia. Ecco un altro articolo su questo argomento, da installsite.org
  • le azioni personalizzate che non obbediscono alla soppressione della GUI in modalità di installazione automatica possono mostrare finestre di dialogo modali che causano il fallimento completo della distribuzione quando eseguite in modo silenzioso. Questo problema insieme alla differenza generale tra la modalità silenziosa e la modalità interattiva è descritta in modo più dettagliato qui (un po 'prolisso e prolisso): la disinstallazione dal Pannello di controllo è diversa da Rimuovi da .msi
  • alcune azioni personalizzate in pacchetti creati erroneamente vengono inserite solo nella sequenza dell'interfaccia utente . Questo fa sì che non vengano eseguiti in modalità di installazione silenziosa. Ciò è grave per la distribuzione aziendale poiché l'installazione silenziosa viene utilizzata qui quasi esclusivamente. Questo problema può influire anche sulla disinstallazione, pertanto potrebbe essere necessario eseguire la disinstallazione in modo interattivo per la disinstallazione per garantire l'esecuzione di tutte le azioni personalizzate di pulizia. Ancora una volta, vedere il collegamento nel precedente punto elenco per una descrizione più lunga dei livelli dell'interfaccia utente.
  • l'installazione contiene file che non sono destinati a essere distribuiti nella posizione in cui si stanno installando. In genere i file di sistema che devono essere installati fianco a fianco nella cartella dell'assembly di winsxs.
  • la bassa velocità di installazione è un altro "problema" che molti segnalano con MSI. Ecco alcuni consigli sull'argomento . Nel complesso Windows Installer presenta un certo sovraccarico a causa dei pesanti requisiti di registrazione nel registro per ciò che viene installato.
  • sovrascrittura di informazioni personalizzate o file di dati condivisi . Ciò può accadere se, ad esempio, un file INI viene installato tramite la tabella File e non la tabella IniFile. Nel secondo caso viene trattato come una "transazione di modifica" nel primo caso si tratta di un'operazione di sostituzione di file, che è generalmente errata a meno che il file INI non contenga formattazione non standard o sezioni di commenti di grandi dimensioni che si desidera distribuire con il file (comune per alcuni strumenti di sviluppo).
  • le complesse regole per la sovrascrittura dei file possono causare la sovrascrittura involontaria dei file o il loro mancato aggiornamento - questo è un classico problema MSI. Consulta questo articolo per sapere come forzare la sovrascrittura di un file che non verrà aggiornato . Le regole possono essere leggermente modificate dalle impostazioni personalizzate per la proprietà REINSTALLMODE impostata a livello di riga di comando msiexec.exe (sovrascrivere versioni precedenti, sovrascrivere versioni uguali, sovrascrivere qualsiasi versione ecc ...) e funzionano in modo diverso per file di dati e file con versione. Dettagli nell'SDK . Capire questo è fondamentale, ed è un design spesso disapprovato anche quando compreso.
  • l'auto-registrazione dei file COM durante l'installazione può attivare avvisi di sicurezza o causare problemi in vari modi. Consulta questo articolo: L'auto-registrazione è considerata dannosa .
  • una variazione del problema di sostituzione dei file si verifica quando un aggiornamento importante (che disinstalla e reinstalla il prodotto) disinstalla i file modificati e reinstalla le versioni predefinite. In questi casi il contenuto appare ripristinato o sovrascritto quando in realtà è stato prima disinstallato e poi reinstallato.
  • i servizi in esecuzione con credenziali utente personalizzate potrebbero perdere le proprie credenziali durante i principali scenari di aggiornamento, nonché ripristinare il file delle impostazioni (sembra) ripristinato (sono stati realmente disinstallati e reinstallati). Solo per la cronaca: a mio avviso, i servizi in esecuzione con le credenziali dell'utente sono in primo luogo un difetto di progettazione.
  • le proprietà pubbliche non vengono passate correttamente dal client al processo del server impedendo il completamento delle azioni personalizzate come previsto. Ciò comporta l'aggiornamento della proprietà SecureCustomActionProperties.
  • Alcune applicazioni non sono in grado di funzionare correttamente per utenti diversi da quello che ha installato il programma di installazione originariamente. Questo è un grave errore di progettazione, ma generalmente può essere risolto da applicativi esperti che utilizzano l'autoguarigione o ActiveSetup per aggiungere chiavi di registro HKCU e file di profilo utente . Questo è un argomento piuttosto complesso e può richiedere un po 'di arte nera per funzionare. Per la cronaca: la vera soluzione, secondo me, è quella di modificare l'applicazione stessa per poter inizializzare tutte le impostazioni per utente in base alle impostazioni predefinite e ai modelli copiati da una posizione per macchina o in base alle impostazioni predefinite interne dell'applicazione (dal codice sorgente).
  • Alcuni file MSI compromettono la sicurezza dei file installati impostando diritti di lettura / scrittura completi per i non amministratori qui, lì e ovunque. Altre volte l'applicazione smette di funzionare su versioni più recenti di Windows a causa della mancanza di autorizzazioni. I pacchetti di applicazioni devono affrontare abbastanza spesso l'analisi delle autorizzazioni personalizzate di un'applicazione. In genere sono necessarie alcune autorizzazioni aggiuntive in HKLM o da qualche parte in% ProgramFiles%
  • Alcune configurazioni di InstallShield nel corso della giornata avrebbero tentato di connettersi a Internet durante l'installazione. Questo è orribile per gli scenari di distribuzione aziendale in cui la distribuzione è strettamente controllata e all'installatore non sarà mai consentito scaricare nuovi contenuti direttamente da Internet.
  • Un altro problema di rete è quando le configurazioni tentano di mostrare una GUI in cui le persone inseriscono i dati convalidati su Internet durante l'installazione o semplicemente per mostrare il contenuto dal loro sito web. Si tratta in genere di indirizzi e-mail, informazioni di contatto, chiavi di licenza e simili. La connessione può fallire completamente per molti motivi, spesso a causa della mancata configurazione del proxy negli ambienti aziendali (non esiste una connessione diretta a Internet, tutto il traffico Internet viene instradato attraverso un server cache specifico e ogni processo deve fornire le credenziali per attraversare il firewall) . Ecco un articolo sui pericoli della convalida delle licenze tramite l'installazione .
  • InstallShield utilizzato per installare un runtime per il suo linguaggio Installscript . Questa installazione di prerequisiti era generalmente inclusa in setup.exe ed era una fonte leggendaria di problemi . Esistevano molte versioni, diverse incompatibilità e un certo numero di errori di runtime . Dalla versione 12 (o successive) questo runtime è ora installato in modo affidabile e si sta compilando in modalità sandbox nativa o in esecuzione (non sono sicuro quale, uno o l'altro - probabilmente in modalità sandbox) in modo affidabile. Le configurazioni di InstallShield precedenti potrebbero tuttavia presentare questo problema di distribuzione. Esiste un sito di supporto legacy da InstallShield per problemi come questi: http://consumer.installshield.com/common.asp
  • Diverse configurazioni possono visualizzare comportamenti di installazione irregolari o bug intermittenti quando eseguiti su macchine configurate per lingue diverse dall'inglese, o anche quando si eseguono versioni localizzate (tradotte) di configurazioni su macchine inglesi. Questo può essere un semplice errore di runtime o casi in cui le finestre di dialogo localizzate presentano tagliando testo o formattazione errata o traduzione errata o molti altri tipi di errori relativi alla localizzazione della lingua- un'intera area di competenza per sé (tradurre il testo in immagini, tradurre il software stesso, tradurre materiale di marketing, gestire richieste di supporto internazionale, adattamento alle impostazioni della lingua nel sistema operativo, ecc ...). Alcune lingue richiedono che l'intera applicazione venga modificata per tener conto delle loro peculiarità linguistiche: i problemi tipici sono le macro di stringhe e le impostazioni della tabella codici, quest'ultima essendo meno problematica con l'introduzione di Unicode. Guarda uno screenshot di esempio da uno strumento di traduzione .
  • Quasi tutte le configurazioni non superano molti dei test di convalida integrati disponibili per testare la qualità dei pacchetti MSI. Vedi questo articolo per un esempio pratico di validazione.
  • A volte gli aggiornamenti non riescono per un MSI a causa del fatto che solo 3 cifre del numero di versione dell'MSI vengono effettivamente controllate durante le scansioni di aggiornamento principali.
  • L'installazione di file INI è una funzionalità integrata di Windows Installer. Le voci possono essere aggiunte, rimosse, unite o trattate in qualsiasi modo richiesto. Tuttavia, è abbastanza comune che i file INI vengano installati come file anziché come valori segmentati. Ciò può causare la sovrascrittura del file INI durante la reinstallazione, anziché essere aggiornato. Un problema MSI molto comune.
  • Il problema sopra riportato riguarda anche l'applicazione .NET e i relativi file Config.xml. In questo caso MSI NON ha un modo integrato per aggiornare il contenuto in modo dettagliato ed è necessario codificare l'aggiornamento tramite un'azione personalizzata o sostituire l'intero file al momento dell'installazione. Wix potrebbe avere nuove funzionalità per questo, ma il motore di Windows Installer non ha questo integrato.

Ci sono una serie di errori più sottili e molti problemi più grandi e tipici che avrò dimenticato.

Consulta l' articolo sulle migliori pratiche di Windows Installer da MSDN .


5

L'uso di MSI semplifica inoltre l'applicazione di patch (file MSP) e gli aggiornamenti. MSI utilizza il concetto di codici univoci di prodotto e aggiornamento che semplificano l'intero processo.

Alcuni sistemi di distribuzione (CA Unicenter Software Delivery è un esempio) possono anche comprendere gli MSI in un modo speciale, che consente loro di integrarsi molto meglio nel sistema di distribuzione. Ad esempio, è possibile inserire un MSI nella libreria software del sistema di distribuzione e rileverà automaticamente le varie funzionalità all'interno del prodotto e consentirà automaticamente azioni personalizzate molto più granulari (installazione locale, verifica, riparazione ecc.) E registrazione.

L'auto-cura / riparazione è anche un grande vantaggio per MSI.


2

Inoltre, controlla l' XML di Windows Installer open source ", un set di strumenti che crea pacchetti di installazione di Windows dal codice sorgente XML. Il set di strumenti supporta un ambiente a riga di comando che gli sviluppatori possono integrare nei loro processi di compilazione per creare pacchetti di installazione MSI e MSM". Questo viene utilizzato da MS per preparare molti dei suoi principali pacchetti software.


0

puoi fare trasformazioni - in teoria puoi personalizzare molto, se il programma è stato impacchettato correttamente dal fornitore puoi effettuare una distribuzione completamente automatizzata senza alcuna interazione con l'utente finale - il che è molto utile quando vuoi standardizzare il tuo ambiente Windows e avere più di una manciata di computer.

per vedere cosa fanno le persone con msis [o distribuzione automatica] visitare ad esempio questo sito e i suoi forum.

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.