Possiedo un pacchetto msi in bundle in un bootstrapper wix masterizzato. Posso estrarre questo MSI dal pacchetto sulla macchina di destinazione?Estrarre il contenuto del bootstrapper di masterizzazione
risposta
È necessario utilizzare l'utilità dark.exe
fornita con WiX.
dark.exe -x temp <installer>
Il pacchetto non può auto-estraersi automaticamente finché qualcuno non implementa this feature.
È possibile estrarre un .msi incorporato dal pacchetto mentre è in esecuzione se si sta utilizzando un'applicazione di avvio automatico personalizzata, quindi estrarre il contenuto di tale file .msi utilizzando l'SDK WiX.
La risposta breve è che è possibile utilizzare la classe Unbinder
per estrarre i file MSI dal bundle:
unbinder = new Unbinder();
unbinder.Unbind(bundlePath, OutputType.Bundle, tmpFolder);
unbinder.DeleteTempFiles();
Quindi, utilizzare la classe InstallPackge
per estrarre i file:
using (var msiPackage = new InstallPackage(msiFilePath, DatabaseOpenMode.Transact) { WorkingDirectory = _targetFolder })
{
using (var session = Microsoft.Deployment.WindowsInstaller.Installer.OpenPackage(msiPackage, ignoreMachineState: true))
{
msiPackage.ExtractFiles(fileKeysToInstall);
}
msiPackage.Close()
}
Ecco una versione molto semplificata di ciò che devi fare. Ho scritto un post sul blog con molti più dettagli, che puoi trovare qui: http://www.wrightfully.com/extracting-msi-files-without-running-the-installer
Nota importante: questo non esegue nessuna delle tue azioni personalizzate, quindi assicurati di tenerne conto.