Récupération des propriétés publiques d'un fichier MSI

12

Existe-t-il un outil ou un mécanisme pour récupérer les propriétés publiques disponibles à partir d'un fichier MSI Windows?

Certains fournisseurs qui fournissent des fichiers MSI ne les documentent pas eux-mêmes, je suis donc curieux de voir s'il existe un moyen de les exposer sans le code source.

Ken Barber
la source
8
L'ORCA de Microsoft , le SuperORCA de Pantaray et la plupart des autres modifications MSI vous permettront de parcourir / modifier n'importe quelle table, y compris la Propertytable. Avez-vous eu un flux de travail ou un cas d'utilisation spécifique en dehors de simplement fouiner dans le MSI?
jscott
2
Je voulais comprendre les propriétés publiques disponibles afin qu'elles puissent être transmises avec précision lors de l'installation, sans avoir à interroger le fournisseur ou la documentation (car ce n'est pas toujours possible). Avec Puppet, nous pouvons transmettre les propriétés MSI lors de l'installation (nous enveloppons misexec.exe), donc c'est pratique d'avoir cette capacité.
Ken Barber
1
Il peut exister d'autres propriétés publiques que vous pouvez transmettre pour contrôler l'installation, bien qu'elles ne soient pas répertoriées dans le tableau des propriétés. Les propriétés peuvent être définies dynamiquement en fonction d'une condition, recherche dans le Registre par exemple. La documentation du fournisseur est donc la meilleure source d'informations.
Alexey Ivanov
Vous pouvez également exécuter l'installation avec une journalisation détaillée pour voir comment les propriétés modifient leurs valeurs.
Alexey Ivanov
Désolé pour le retard - j'ai essayé Orca et son fascinant, mais j'ai confirmé le comportement que vous décrivez @AlexeyIvanov - c'est-à-dire que certaines propriétés n'apparaîtront pas. J'ai confirmé cela avec splunk.msi et ses documents. Je suppose que ceux qui apparaissent dans Orca ont des valeurs par défaut, mais ce n'est pas une liste canonique. Pouvez-vous expliquer un peu plus la méthodologie de journalisation détaillée?
Ken Barber

Réponses:

8

Lessmsi fournit une ligne de commande ainsi qu'une application interactive pour récupérer tout attribut du .msi.

De manière interactive, ouvrez le .msi puis allez en mode Table et sélectionnez ou tapez "Propriété". Cependant, bien que cela donne les noms de propriété, il ne donne pas les valeurs valides pour cette propriété (ou je n'ai pas découvert le bon endroit pour chercher).

Ligne de commande pour répertorier le tableau des propriétés à consoler (frustrant, ne peut pas être capturé avec une simple > output.csvredirection)

lessmsi l -t Property ...\path\to\setup.msi
Matt Wilkie
la source
1

Étant donné que le fichier MSI stocke les propriétés publiques dans une base de données interne, vous pouvez simplement les interroger à l'aide de VBScript et SQL.

Voici un exemple de script qui renverra toutes les propriétés stockées dans le fichier MSI. Il est courant d'utiliser des majuscules pour définir les propriétés publiques, c'est ainsi qu'elles sont généralement identifiables.

James Hebden
la source
1

lessmsi est un excellent outil qui fonctionne certainement ici si vous êtes prêt à ouvrir son interface graphique et à effectuer une enquête manuelle. Cependant, je dirai que la commande suivante ne présente pas de manière fiable toutes les propriétés:

lessmsi l -t Property <msi_name>

Une façon de (mieux) garantir que vous obtenez toutes les propriétés possibles consiste à effectuer une installation, une réparation ou une désinstallation avec le fichier MSI et à enregistrer le processus. La commande suivante enregistre uniquement les propriétés et rien d'autre:

<msi_name> /lp! <msi_property_logfile>

La commande ci-dessus est équivalente à:

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

Ma méthode préférée, cependant, est de ne pas réellement installer / supprimer / réparer (et simplement d'extraire à la place). Les avantages de cette méthode par rapport à lessmsi est qu'elle ne nécessite pas d'utilitaire tiers (c'est-à-dire lessmsi ) et qu'elle ne vous oblige pas à jouer avec les installations. Étant donné que vous disposez de suffisamment d'espace disque pour installer réellement le programme, vous pouvez effectuer:

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

Notez que le <absolute_path_to_extract_to>peut pointer vers un répertoire inexistant (la commande créera les répertoires nécessaires ou échouera).

Si vous détestez l'interface utilisateur d'installation pour une raison quelconque, vous pouvez ajouter l' /qroption, ce qui «réduira» et éventuellement éliminera l'interface utilisateur sans nuire au processus de journalisation des propriétés. Soyez averti cependant - si vous allez "plus bas" que l'interface utilisateur réduite (à savoir /qb| | /passiveou /qn| /quiet), <msi_property_logfile>il se peut que certaines propriétés vous manquent.

YenForYang
la source
Le problème de cette méthode est: vous devez réellement exécuter le programme d'installation. Même si vous l'installez dans un répertoire cible non standard, vous avez toujours foiré les registres.
Wang
0

La façon dont je le fais maintenant est d'utiliser le module Carbon Powershell. Pour installer le type de module:

Install-Module -Name 'Carbon' -AllowClobber

Alors simplement

msi your_msi_path.msi

Exemple:

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
gigi
la source
-1

Je pense que maintenant la meilleure façon de le faire est d'utiliser PowerShell. Voici un script qui fait très bien le travail: https://gallery.technet.microsoft.com/scriptcenter/Get-MsiDatabaseProperties-09d9c87c

gigi
la source
Cette réponse n'est qu'un lien, qui peut changer / disparaître.
David Makogon
Il existe d'autres réponses qui ne sont qu'un lien. Je ne me sens pas à l'aise de copier et coller le code d'autres personnes. Je pense que ma réponse donne une option alternative et je ne comprends vraiment pas le vote négatif.
gigi