Comment puis-je lister le GUID d'un programme installé sous Windows? Sinon, est-il plus facile de trouver le GUID si j'ai le fichier MSI?
Je cherche dans le fichier MSI avec Orca mais je ne sais pas où chercher pour trouver le GUID.
Merci!
Les trois principaux GUID d'une base de données Windows Installer sont les suivants: Package Code , ProductCode et UpgradeCode . Le premier est stocké dans le flux d'informations récapitulatif (menu Affichage dans Orca) et les autres dans la table des propriétés. (D'autres formes de bases de données, telles que les modules de fusion et les correctifs, ont des GUID similaires à des emplacements similaires, tels que le GUID du module de fusion ou le code du correctif GUID - chacun étant stocké de manière identique au code du package. )
Pour les trouver sur une machine, vous pouvez chercher dans la clé Uninstall, où le code de produit est souvent utilisé. Ou mieux encore, si vous souhaitez énumérer ce qui est actuellement installé sur la machine, vous pouvez appeler MsiEnumProducts .
Il existe plusieurs façons de localiser le produit GUID pour packages installés. S'il vous plaît préférez l'option numéro 3.
Les plus courants sont:
- 32-BIT SECTION:
HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall (per user section)
- 64-BIT SECTION:
HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
- MERGED SECTION (supposedly all of the above merged together, I have not verified):
HKCR\Installer\Products
Si ce que vous essayez de faire est de désinstaller le produit en question, consultez la réponse complète de désinstallation MSI: Désinstallation d’un fichier MSI à partir de la ligne de commande sans utiliser msiexec
Si vous préférez utiliser VBScript à la place de Powershell, essayez la réponse de Phil Wilson: comment savoir quels produits sont installés - les nouveaux produits sont déjà installés MSI windows
si vous voulez juste savoir ce que contiennent les noms ProductName et ProductCode (ProductId) d'un MSI donné, sans installer ce MSI ni vérifier le registre, vous pouvez interroger le MSI lui-même avec PowerShell en utilisant une fonction comme celle-ci (inspirée par http: // www .scconfigmgr.com/2014/08/22/comment-obtenir-obtenir-msi-fichier-information-with-powershell ):
function Get-MSIProperties {
param (
[Parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[System.IO.FileInfo] $path,
[string[]] $properties = @('ProductCode', 'ProductVersion', 'ProductName', 'Manufacturer', 'ProductLanguage')
)
begin {
$windowsInstaller = (New-Object -ComObject WindowsInstaller.Installer)
}
process {
$table = @{}
$msi = $windowsInstaller.GetType().InvokeMember('OpenDatabase', 'InvokeMethod', $null, $windowsInstaller, @($Path.FullName, 0))
foreach ($property in $properties) {
try {
$view = $msi.GetType().InvokeMember('OpenView', 'InvokeMethod', $null, $msi, ("SELECT Value FROM Property WHERE Property = '$($property)'"))
$view.GetType().InvokeMember('Execute', 'InvokeMethod', $null, $view, $null)
$record = $view.GetType().InvokeMember('Fetch', 'InvokeMethod', $null, $view, $null)
$table.add($property, $record.GetType().InvokeMember('StringData', 'GetProperty', $null, $record, 1))
}
catch {
$table.add($property, $null)
}
}
$msi.GetType().InvokeMember('Commit', 'InvokeMethod', $null, $msi, $null)
$view.GetType().InvokeMember('Close', 'InvokeMethod', $null, $view, $null)
$msi = $null
$view = $null
return $table
}
end {
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($windowsInstaller) | Out-Null
[System.GC]::Collect()
}
}
Ma solution est que j'ai écrit une petite application console qui renvoie ProductCode de n'importe quel fichier MSI (le nom est transmis en tant qu'argument de programme). Je le fais en lisant le fichier guid du fichier .msi lui-même. En gros, j’ouvre ce fichier msi sous forme de chaîne et cherche un texte commençant par «ProductCode», obtenant son index et prenant 38 caractères avant cette position d’index. Voici la capture d’écran:
Généralement (mais pas universellement), si un logiciel utilise une installation basée sur MSI, le GUID se trouve dans l'entrée Désinstaller. Il s'agira généralement du nom de la clé ou apparaîtra dans la valeur UninstallString et/ou UninstallPath. Parfois, la vie est facile et il existe une valeur ProductGuid.
Les entrées de désinstallation peuvent être trouvées ici:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Sur une version 64 bits de Windows, il existe deux clés de ce type, une pour les logiciels 64 bits et une seconde pour les logiciels 32 bits:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall