Recupero di proprietà pubbliche da un file MSI


12

Esiste uno strumento o un meccanismo per recuperare le proprietà pubbliche disponibili da un file MSI di Windows?

Alcuni fornitori che forniscono file MSI non li documentano da soli, quindi sono curioso di vedere se esiste un modo per esporli senza il codice sorgente.


8
L'ORCA di Microsoft , la SuperORCA di Pantaray e quasi tutte le altre modifiche MSI ti permetteranno di sfogliare / modificare qualsiasi tabella inclusa la Propertytabella. Hai avuto un flusso di lavoro specifico o un caso d'uso al di fuori del frugare nell'MSI?
jscott

2
Volevo capire le proprietà pubbliche disponibili in modo che potessero essere passate con precisione durante l'installazione, senza dover interrogare il fornitore o la documentazione (poiché ciò non è sempre possibile). Con Puppet possiamo passare le proprietà MSI durante l'installazione (avvolgiamo misexec.exe), quindi è utile avere questa capacità.
Ken Barber

1
Potrebbero esserci altre proprietà pubbliche che è possibile passare per controllare l'installazione sebbene non siano elencate nella tabella Proprietà. Le proprietà possono essere impostate in modo dinamico a seconda di una condizione, ad esempio la ricerca nel registro. Quindi la documentazione del fornitore è la migliore fonte di informazioni.
Alexey Ivanov,

È inoltre possibile eseguire l'installazione con la registrazione dettagliata per vedere come le proprietà cambiano i loro valori.
Alexey Ivanov,

Mi dispiace per il ritardo - ho provato Orca ed è affascinante, ma ho confermato il comportamento che descrivi @AlexeyIvanov - ovvero, alcune proprietà non verranno visualizzate. L'ho confermato con splunk.msi e i suoi documenti. Immagino che quelli che appaiono in Orca abbiano delle impostazioni predefinite, ma questa non è una lista canonica. Puoi spiegarci un po 'di più sulla metodologia di registrazione dettagliata?
Ken Barber

Risposte:


8

Lessmsi fornisce una riga di comando e un'applicazione interattiva per il recupero di qualsiasi attributo dal file .msi.

In modo interattivo, apri il file .msi, quindi vai alla vista Tabella e seleziona o digita "Proprietà". Tuttavia, mentre questo dà i nomi delle proprietà, non fornisce i valori validi per detta proprietà (o non ho scoperto il posto giusto dove cercare).

Riga di comando per elencare la tabella Proprietà da console (frustrante, non può essere catturata con un semplice > output.csvreindirizzamento)

lessmsi l -t Property ...\path\to\setup.msi

1

Dato che il file MSI archivia le proprietà pubbliche in un database interno, puoi effettivamente eseguirne una query utilizzando VBScript e SQL.

Ecco uno script di esempio che restituirà tutte le proprietà memorizzate nel file MSI. È normale usare lettere maiuscole per definire le proprietà pubbliche, in questo modo sono normalmente identificabili.


1

lessmsi è un ottimo strumento che sicuramente funziona qui se sei disposto ad aprire la sua GUI e fare qualche indagine manuale. Tuttavia, dirò che il seguente comando non presenta in modo affidabile tutte le proprietà:

lessmsi l -t Property <msi_name>

Un modo per (meglio) garantire di ottenere tutte le proprietà possibili è effettivamente eseguire un'installazione, riparare o disinstallare con il file MSI e registrare il processo. Il seguente comando registra solo le proprietà e nient'altro:

<msi_name> /lp! <msi_property_logfile>

Il comando sopra è equivalente a:

msiexec /lp! <msi_property_logfile> /i <msi_name>

Il mio metodo preferito, tuttavia, è non installare / rimuovere / riparare (e invece semplicemente estrarre). I vantaggi di questo metodo rispetto a lessmsi è che non richiede un'utilità di terze parti (ovvero lessmsi ) e non richiede di confondere con alcuna installazione. Dato che hai abbastanza spazio su disco per installare effettivamente il programma, puoi fare:

msiexec /a <msi_name> /lp! <msi_property_logfile> TARGETDIR=<absolute_path_to_extract_to>

Si noti che <absolute_path_to_extract_to>can può puntare a una directory inesistente (il comando creerà le directory necessarie o fallirà).

Se odi l'interfaccia utente dell'installazione per qualsiasi motivo, puoi aggiungere l' /qropzione, che "ridurrà" ed eventualmente eliminerà l'interfaccia utente senza compromettere il processo di registrazione delle proprietà. Attenzione però: se vai "più in basso" dell'interfaccia utente ridotta (vale a dire /qb| /passiveo /qn| /quiet), <msi_property_logfile>potresti non avere alcune proprietà.


Il problema di questo metodo è: devi effettivamente eseguire il programma di installazione. Anche se lo installi su un targetdir non standard, hai comunque incasinato i registri.
Wang,

0

Il modo in cui lo sto facendo ora è usando il modulo Carbon Powershell. Per installare il tipo di modulo:

Install-Module -Name 'Carbon' -AllowClobber

Quindi semplicemente

msi your_msi_path.msi

Esempio:

msi putty-64bit-0.70-installer.msi

ProductName                 ProductVersion Manufacturer ProductCode                         

-----------                 -------------- ------------ -----------                         

PuTTY release 0.70 (64-bit) 0.70.0.0       Simon Tatham 45b3032f-22cc-40cd-9e97-4da7095fa5a2

-1

Penso che ora probabilmente il modo migliore per farlo sia usare PowerShell. Ecco uno script che fa davvero bene il lavoro: https://gallery.technet.microsoft.com/scriptcenter/Get-MsiDatabaseProperties-09d9c87c


Questa risposta è solo un link, che può cambiare / scomparire.
David Makogon,

Ci sono altre risposte che sono semplicemente un link. Non mi sento a mio agio nel copiare e incollare il codice di altre persone. Penso che la mia risposta offra un'opzione alternativa e non capisco davvero il voto negativo.
Gigi,
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.