Comment puis-je trouver le guide produit d'une configuration MSI installée?

je dois trouver le product GUID pour un fichier Msi installé afin d'effectuer l'entretien tel que la correction, désinstaller et aussi à des fins d'audit.

42
demandé sur Stein Åsmul 2015-04-29 10:54:30

1 réponses

Version Courte

l'information ci-dessous a considérablement augmenté au fil du temps et est peut-être devenue un peu trop élaborée. comment obtenir les codes des produits rapidement? (quatre approches):

1. Utilisez la Powershell "one-liner "

Faites défiler vers le bas pour la capture d'écran et étape par étape . Avertissement aussi ci-dessous-risques mineurs ou modérés selon qui vous demandez. Fonctionne bien pour moi. Tout autoréparation déclenchée par cette option devrait généralement pouvoir être annulée. Le package integrity checks déclenché ajoute cependant un certain "bruit" de journal d'événements. Note ! IdentifyingNumber est le ProductCode WMI (particularité).

get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize

démarrage Rapide de Powershell : maintenez la touche touche Windows , appuyez sur R , tapez "powershell" et appuyez sur entrez

2. Utiliser VBScript

Décrit ci-après sous " autres Outils" (article 3) . Cette option peut être plus sûr que Powershell pour les raisons expliquées en détail ci-dessous. En substance, il est (beaucoup) plus rapide et pas capable de déclencher MSI auto-réparation car il ne passe pas par WMI (il accède le MSI COM API directement - à la vitesse de claquage). cependant, il est plus impliqué que L'option Powershell (plusieurs lignes de code).

3. Recherche Dans Le Registre

certains jurent en cherchant des choses dans le registre. Pas mon approche recommandée - j'aime passer par les API appropriées (ou en d'autres termes: OS function calls). Il y a toujours des exceptions étranges comptabilisées seulement par les internes de la API-mise en œuvre:

  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
  • HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
  • HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall

4. Fichier MSI Original / source WiX

vous pouvez trouver le Product Code dans le Property table de tout fichier MSI (et tout autre bien ainsi). Toutefois, il est concevable que le guide soit (rarement) dépassé par un transform appliqué au moment de l'installation et donc ne pas correspondre à la directive sous laquelle le produit est enregistré (approche 1 et 2 ci - dessus signalera le code produit réel - qui est enregistré avec Windows-dans de tels scénarios rares).

vous avez besoin d'un outil pour visualiser les fichiers MSI . Voir vers le bas de la réponse suivante pour une liste d'outils gratuits, vous pouvez télécharger ou voir option rapide ci-dessous): Comment puis-je comparer le contenu de deux (ou plus) fichiers MSI?

mise à jour : pour la commodité et besoin de vitesse : -), télécharger SuperOrca sans délai et les tracas de ce lien direct-télécharger - l'outil est assez bon pour obtenir le travail fait - installer, ouvrir MSI et aller directement à la table de propriété et de trouver le ProductCode ligne ( s'il vous plaît toujours virus cochez a le téléchargement direct de hotlink - évidemment - vous pouvez utiliser virustotal.com à faire soi - scan en ligne en utilisant des dizaines d'anti-virus et les logiciels malveillants suites pour analyser ce que vous téléchargez).


et ci-dessous vous trouverez la réponse originale qui "s'est développée organiquement" dans beaucoup de détails.

peut-être voir " désinstaller les paquets MSI " section ci-dessous si c'est la tâche que vous devez effectuer.


Récupérer Les Codes De Produits

mise à jour : si vous avez également besoin du code de mise à niveau , cochez cette réponse: Comment puis-je trouver le code de mise à niveau d'un fichier Msi installé? (extrait associés aux codes de produit, la mise à niveau des codes et des noms de produits dans une sortie de tableau semblable à celui ci-dessous).

  • ne peut pas utiliser PowerShell? voir la section" Autres Outils " ci-dessous.
  • vous cherchez à désinstaller? voir la section" désinstaller les paquets MSI " ci-dessous.

Feu Powershell ( maintenez la touche Windows enfoncée, appuyez sur R, relâchez la touche Windows, tapez "powershell" et appuyez sur OK ) et l'exécuter la commande ci-dessous pour obtenir une liste du paquet Msi installé codes produits avec le chemin du paquet cache local et le nom du produit (maximiser la fenêtre PowerShell pour éviter les noms tronqués).

avant de lancer cette ligne de commande, veuillez lire l'avertissement ci-dessous (rien de dangereux, juste quelques nuisances potentielles). La Section 3 sous" Outils De Rechange " montre une autre façon d'obtenir la même information en utilisant VBScript. Si vous essayez de désinstaller un paquet il y a une section ci-dessous avec des exemples de msiexec.lignes de commande exe:

get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize

la sortie devrait être similaire à celle-ci:

enter image description here

Note! Pour une raison étrange, le "ProductCode" est appelée "Identifiingnumber" in WMI. Donc en d'autres termes - dans l'image au-dessus du numéro D'identification est le code de produit.

si vous avez besoin de exécuter cette requête à distance contre des lots d'ordinateur distant , voir " récupérer les Codes de produit D'un ordinateur distant " section ci-dessous.

clause de non-responsabilité (important, s'il vous plaît lire avant de lancer la commande!): En raison de Microsoft design étrange, tout appel WMI à Win32_Product (comme la commande PowerShell ci-dessous) va déclencher une validation de la package immobilier . En plus d'être assez lent , cela peut dans de rares cas déclencher une auto-réparation MSI. Cela peut être un petit paquet ou quelque chose un énorme studio visuel. Dans la plupart des cas, cela ne se produit pas - mais il y a un risque. N'exécute pas cette commande avant une importante de réunion -, il n'est jamais dangereux (il est en lecture seule), mais il pourrait conduire à une longue réparation dans de très rares cas (je pense que vous pouvez annuler la auto-réparation aussi bien-sauf si activement empêchée par le paquet en question, mais il redémarrera si vous appelez Win32_Product encore et cela va persister jusqu'à ce que vous laissez la finition auto-réparation - parfois, il pourrait continuer, même si vous le laissez terminer: Comment puis-je déterminer ce qui provoque Windows Installer répété auto-réparation? ).

Et juste pour le dossier: certaines personnes ont leurs journaux des événements de remplissage avec MsiInstaller id de l'événement 1035 entrées (voir le code du chef de réponse) - apparemment causée par des requêtes WMI à la Win32_Product classe (personnellement, je n'ai jamais vu cela). C'est et non directement lié à la commande Powershell suggérée ci-dessus, c'est dans le contexte de l'utilisation générale de la classe Wim Win32_Product.

vous pouvez aussi obtenir la sortie sous forme de liste (au lieu de table):

get-wmiobject -class Win32_Product

dans ce cas, la sortie est similaire à celle-ci:

enter image description here


Extraire Les Codes Produits D'Un Ordinateur Distant

en théorie, vous devriez juste être en mesure de spécifier un nom d'ordinateur distant dans le cadre de la commande elle-même. Ici, c'est le même commande que ci-dessus configurée pour fonctionner sur la machine "RemoteMachine" (section -ComputerName RemoteMachine ajoutée):

get-wmiobject Win32_Product -ComputerName RemoteMachine | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize

Cela pourrait fonctionner si vous exécutez avec les droits d'administrateur de domaine sur un domaine approprié. Dans un environnement de groupe de travail (petit bureau / réseau à domicile), vous devrez probablement ajouter des identificateurs d'utilisateur directement aux appels WMI pour que cela fonctionne.

en outre, les connexions à distance dans WMI sont affectées par (au moins) le pare-feu Windows , paramètres DCOM , et Contrôle de Compte d'Utilisateur (UAC) (ainsi que tous les non-Microsoft facteurs - par exemple vrai pare-feu , tiers logiciel de pare-feu , logiciel de sécurité de diverses sortes , etc...). Que cela fonctionne ou non dépend de votre configuration exacte.

mise à jour : une section détaillée sur l'exécution WMI à distance peut être trouvée dans cette réponse: Comment puis-je trouver le Code de mise à niveau pour un fichier Msi installé? . Il apparaît une règle de pare-feu et la suppression de l'invite UAC via un tweak de Registre peut faire fonctionner les choses dans un réseau de groupe de travail environnement. Pas recommandé change du point de vue de la sécurité, mais ça a marché pour moi.


Autres Outils

PowerShell nécessite le .net framework pour être installé (actuellement dans la version 3.5.1 il semble? En octobre, en 2017). La véritable application PowerShell elle-même peut également manquer de la machine même si .NET est installé. Enfin, je crois PowerShell peut être désactivé ou verrouillé par diverses politiques et privilèges du système.

Si c'est le cas, vous pouvez essayer quelques autres façons de récupérer des codes de produit. Mon alternative préférée est VBScript - il est rapide et flexible (mais peut également être verrouillé sur certaines machines, et le script est toujours un peu plus impliqué que l'utilisation d'outils).

  1. intégré dans Windows WMI outil : wbemtest.exe .

    • Lancement wbemtest.exe ( Maintenez la touche Windows enfoncée, appuyez sur R, relâchez la touche Windows, tapez "wbemtest.exe" et appuyez sur OK ).
    • cliquez sur connect et ensuite OK (namespace par défaut à root\cimv2), et cliquez sur " connect " à nouveau.
    • cliquez " Requête " et le type de cette WQL commande (SQL saveur): SELECT IdentifyingNumber,Name,Version FROM Win32_Product et cliquez sur "Utiliser" (ou équivalent à l'outil sera localisée).
    • Screenshot de sortie D'échantillon (tronqué). Pas le plus beau formatage, mais vous pouvez obtenir les données dont vous avez besoin. le numéro D'identification est le code de produit MSI :

wbemtest.exe

  1. ensuite, vous pouvez essayer un outil WMI personnalisé, plus complet comme WMIExplorer.exe

    • ceci n'est pas inclus dans Windows. C'est un très bon outil, cependant. Recommandé.
    • Check it out at: https://github.com/vinaypamnani/wmie2/releases
    • lancer L'outil, cliquez sur Connecter, double clic ROOT \ CIMV2
    • De la " "1519340920 de la Requête" onglet ", tapez la requête suivante: SELECT IdentifyingNumber,Name,Version FROM Win32_Product et appuyez sur Execute.
    • Screenshot sauté,l'application nécessite trop d'écran immobilier immobilier.
  2. enfin, vous pouvez essayer un VBScript pour accéder à l'information via l'interface d'automatisation MSI (caractéristique principale de Windows - il est sans rapport à WMI ).

    • copier le script ci-dessous et coller dans un *.vbs fichier sur votre bureau, et d'essayer de l'exécuter en double-cliquant. Votre bureau doit être accessible en écriture pour vous, ou vous pouvez utiliser n'importe quel autre emplacement accessible en écriture.
    • ce N'est pas un grand VBScript. Terseness a été préféré au traitement des erreurs et à l'exhaustivité, mais il devrait faire le travail avec un minimum de complexité.
    • la production le fichier est créé dans le dossier où vous exécutez le script ( le dossier doit être en écriture ). Le fichier de sortie est appelé msiinfo.csv .
    • double - cliquez sur le fichier pour ouvrir dans une application de tableur, sélectionnez virgule comme délimiteur sur import - OR-il suffit d'ouvrir le fichier dans Bloc-notes ou n'importe quel visualiseur de texte.
    • ouverture dans un tableur permettra des fonctionnalités de tri avancées.
    • ce script peut facilement être adapté pour montrer une quantité significative de détails supplémentaires sur l'installation MSI . Une démonstration de cela peut être trouvé ici: comment savoir quels produits sont installés - les nouveaux produits sont déjà installés MSI windows .
' Retrieve all ProductCodes (with ProductName and ProductVersion)
Set fso = CreateObject("Scripting.FileSystemObject")
Set output = fso.CreateTextFile("msiinfo.csv", True, True)
Set installer = CreateObject("WindowsInstaller.Installer")

On Error Resume Next ' we ignore all errors

For Each product In installer.ProductsEx("", "", 7)
   productcode = product.ProductCode
   name = product.InstallProperty("ProductName")
   version=product.InstallProperty("VersionString")
   output.writeline (productcode & ", " & name & ", " & version)
Next

output.Close

Je ne peux pas penser à d'autres options à usage général pour récupérer les codes de produit pour le moment, s'il vous plaît ajouter si vous connaissez un. il suffit de modifier inline plutôt que d'ajouter trop de commentaires s'il vous plaît.

vous pouvez certainement accéder à ces informations depuis votre application en appelant l'interface d'automatisation MSI (basé sur COM) ou le C++ Fonctions d'installateur MSI (API Win32). Ou utilisez même les requêtes WMI de votre application comme vous le faites dans les exemples ci-dessus en utilisant PowerShell , wbemtest.exe ou WMIExplorer.exe .


désinstaller les paquets MSI

si vous souhaitez désinstaller le paquet MSI vous avez le code du produit, vous pouvez le faire comme suit en utilisant un message de commande élevé (recherchez cmd.exe , clic droit et exécuter en tant qu'administrateur ):

Option 1 : de Base, interactif désinstaller sans enregistrement (rapide et facile):

msiexec.exe /x {00000000-0000-0000-0000-00000000000C}

Quick Paramètre Explication:

/X = run uninstall sequence
{00000000-0000-0000-0000-00000000000C} = product code for product to uninstall

vous pouvez également activer (verbose) la journalisation et l'exécution en mode silencieux si vous le souhaitez, nous conduisant à l'option 2:

Option 2 : désinstallation en mode Silencieux avec l'enregistrement détaillé (mieux pour les fichiers par lots):

msiexec.exe /x {00000000-0000-0000-0000-00000000000C} /QN /L*V "C:\My.log" REBOOT=ReallySuppress

Quick Paramètre Explication:

/X = run uninstall sequence
{00000000-0000-0000-0000-00000000000C} = product code for product to uninstall
/QN = run completely silently
/L*V "C:\My.log"= verbose logging at specified path
REBOOT=ReallySuppress = avoid unexpected, sudden reboot

il y a une référence complète pour la désinstallation MSI ici (différentes façons de désinstaller les paquets MSI): Désinstaller un fichier MSI depuis la ligne de commande sans utiliser msiexec . Il existe une pléthore de différentes façons de désinstaller.

si vous sont en train d'écrire un fichier batch, s'il vous plaît jeter un oeil à la section 3 dans le ci-dessus, réponse liée pour quelques variantes communes et standard de ligne de commande uninstall.

et un lien rapide vers msiexec.exe (options de ligne de commande) (aperçu de la ligne de commande pour msiexec.exe à partir de MSDN). Et la version Technet ainsi.


recherche D'autres propriétés / informations MSI (F. ex code de mise à niveau)

UPDATE : s'il vous plaît trouver une nouvelle réponse sur la façon de trouver le code de mise à niveau pour les paquets installés 1519710920" au lieu de chercher manuellement le code dans les fichiers MSI. Pour les paquets installés, cela est beaucoup plus fiable. Si le paquet n'est pas installé, vous avez encore besoin de regarder dans le fichier MSI (ou la source fichier utilisé pour compiler le MSI) pour trouver le code de mise à jour. En laissant dans la vieille section ci-dessous:

si vous voulez obtenir le UpgradeCode ou autres propriétés MSI , vous pouvez ouvrir l'installation MSI mise en cache pour le produit à partir de l'emplacement spécifié par " LocalPackage "dans le spectacle d'image ci - dessus (quelque chose comme: C:\WINDOWS\Installerc080ae.msi - c'est un nom de fichier hex, unique sur chaque système). Ensuite, vous regardez dans la" table de propriété " pour le code de mise à jour (il est possible que le code de mise à jour soit redéfini dans une transformation - pour être sûr que vous obtenez la bonne valeur que vous avez besoin pour récupérer le code programatiquement à partir du système - je vais fournir un script pour cela sous peu. Cependant, le code de mise à niveau trouvé dans le MSI caché est généralement correct ).

pour ouvrir les fichiers MSI mis en cache, utilisez Orca ou un autre outil d'emballage. Voici une discussion des différents outils (n'importe lequel d'entre eux fera l'affaire): quel produit d'installation utiliser? InstallShield, WiX, Wise, Advanced Installer, etc . Si vous n'avez pas un tel outil installé, votre pari le plus rapide pourrait être d'essayer Super Orca (il est simple à utiliser, mais pas testé en profondeur par moi).

mise à jour : voici une nouvelle réponse avec des informations sur divers produits gratuits que vous pouvez utiliser pour afficher des fichiers MSI: Comment puis-je comparer le contenu de deux (ou plus) fichiers MSI?

si vous avez Visual Studio installé , essayez de chercher Orca-x86_en-us.msi - sous Program Files (x86) - et installez-le (C'est le propre, le visionneur et l'Éditeur officiel de Microsoft MSI). Trouvez ensuite Orca dans le menu Démarrer. Accédez en un rien de temps :-). Techniquement Orca est installé dans le cadre de Windows SDK (Non Visual Studio), mais Windows SDK est livré avec L'installation de Visual Studio. si vous n'avez pas Visual Studio installé , peut-être connaissez-vous quelqu'un qui le sait? Il suffit de leur faire rechercher ce MSI et de vous envoyer (c'est un tout petit fichier mb) - devrait leur prendre quelques secondes. UPDATE : vous avez besoin de plusieurs fichiers CAB ainsi que le MSI - ceux-ci se trouvent dans le même dossier où le MSI est trouvé. Si non, vous pouvez toujours télécharger le Windows SDK (il est gratuit, mais il est grand et tout ce que vous installez ralentir votre PC). Je ne sais pas quelle partie du SDK installe le MSI Orca. Si vous le faites, veuillez simplement éditer et ajouter des détails ici.



sujets similaires (pour référence et accès facile - je devrais nettoyer cette liste):

81
répondu Stein Åsmul 2018-08-16 16:22:59