2010-03-19 11 views
7

Il nostro team ha recentemente preso in considerazione l'idea di estendere una correzione del registro minore agli utenti per modificare una particolare chiave problematica. Cose piuttosto semplici, solo bisogno di aggiornare 1 chiave/valore all'interno del registro.Creazione di una patch MSI (.msp) a mano?

Quindi al momento utilizziamo Wix per creare programmi di installazione .msi per il prodotto. Mentre esaminando il supporto di Wix per la generazione di file patch msp, sembra che l'unico modo per creare un MSP è un po 'troppo complicata processo multi-step a:

  1. ottenere una copia dell'originale MSI, e compilare un nuova copia del fisso MSI
  2. Scrivi un nuovo file di Wix che punta a installatori
  3. Compilare il file Wix in un .wixobj con la candela ad una Psp
  4. Run torcia/Pyro finita prima/dopo istantanee del programmi di installazione originali e .psp o, in alternativa, utilizzando MsiMsp.exe

Ora la mia domanda è, non posso semplicemente descrivere la modifica del registro in un file Wix e compilarlo direttamente in .msp, senza i passaggi 1 e 4 - che è un enorme sforzo per un semplice cambiamento?

risposta

7

No. Una patch è il delta di due immagini installabili. Per generare il delta, anche se la differenza è molto piccola, avrai bisogno di entrambe le immagini.

+1

La spiegazione è corretta. Stai solo descrivendo un metodo manuale per creare le due immagini. –

2

È possibile creare MSP (patch) e MST (trasformazioni) utilizzando Orca e gli altri strumenti dall'SDK di installazione di Windows (che ora fa parte di Windows SDK). Tuttavia, il processo potrebbe non essere molto più semplice di quello che hai già con WiX.

Here è la migliore spiegazione che potrei trovare con alcuni minuti di ricerca su Google; Sospetto ancora che ci debba essere qualcosa di meglio, comunque. Ma se hai familiarità con il formato di Windows Installer, è piuttosto facile esplorare e provare alcune cose con Orca fino a quando non ne hai la possibilità.

3

Sì, c'è un altro modo, anche se si può considerare altrettanto complicato:

  1. Creare un amministratore di installazione della vostra "versione base" utilizzando msiexec /qn /a <msi-file> TARGETDIR=<absolute-path-of-existing-directory> (se si esegue questo da un file di marca o altro script , utilizzare start /wait davanti al comando), dire in %BASEDIR%
  2. ripetere quanto sopra, ma in %UPDDIR%
  3. Ora che avete scompattato l'installazione all'interno %UPDDIR%, apportare le modifiche al file con estensione msi che saranno nella radice di quella cartella ... si dovrebbe anche preferibilmente modificare il numero di versione ...
    • Se si scambiano i file, assicurarsi di aggiornare la tabella hash (MsiFileHash) o la tabella File per i file con le informazioni sulla versione.
    • Se si modifica solo un valore del Registro di sistema, si dovrebbe andare bene senza alcuna di queste ...
  4. Ora preparare un file .pcp (Patch Proprietà creazione) per puntare una riga nella TargetImages tabella alla .msi in %BASEDIR% e una riga nella UpgradedImages alla .msi in %UPDIR%
  5. Invoke msimsp.exe <pcp-file> -p <absolute-path-to-desired-patch-file>

Voilà, hai finito.

Ora, se questo vale, dipende solo da te.

È come lo faccio con l'aiuto di alcuni script che eseguono query SQL sui database MSI per interrogare i valori o aggiornarli secondo necessità. Questo funziona perfettamente ed è stato inserito in un file make di GNU per creare un sacco di MSI, MSI derivati, patch e patch fittizie (per i test).

Il trucco qui consiste nel patchare l'immagine admin decompressa e dirigere msimsp.exe per creare una patch tra la versione invariata e la versione modificata dell'immagine amministratore decompressa. Tutto sommato si adatta alla tua esigenza di farlo "a mano".

Scrivi un commento nel caso in cui qualcosa abbia bisogno di chiarimenti.

Problemi correlati