Comment trouver le code de mise à jour et le code produit d'une application installée sous Windows 7

j'ai une application installée sur ma machine. J'ai aussi son code source mais d'une façon ou d'une autre le code produit et le code de mise à jour de cette application ont été changés.

maintenant je veux obtenir le code de mise à jour et le code de produit de cette application installée. Je pense que cela doit être un outil pour cela.

est-ce que quelqu'un peut m'indiquer comment obtenir le code de mise à jour et le code de produit d'une application installée?

34
demandé sur Martin Prikryl 2011-02-21 09:53:06

10 réponses


IMPORTANT : Cela fait longtemps que cette réponse n'a pas été affichée à l'origine, et les gens intelligents ont trouvé des réponses plus sages. Cochez Comment puis-je trouver le code de mise à niveau d'un fichier Msi installé? de @ Stein Åsmul si vous avez besoin d'une approche solide et complète.


Voici une autre façon (vous n'avez pas besoin d'outils):

  • ouvrir le registre du système et rechercher la clé HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall (si c'est un installateur 32 bits sur une machine 64 bits, il pourrait être sous HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall à la place).
  • les GUIDs énumérés sous cette clé sont les produits installés sur cette machine
  • trouvez celui dont vous parlez-étape par étape jusqu'à ce que vous voyez son nom sur le panneau de droite

ce GUID est le code produit.

maintenant, si vous êtes sûr que la réinstallation de cette application se passera bien, vous pouvez lancer la ligne de commande suivante:

msiexec /i {PRODUCT-CODE-GUID-HERE} RÉINSTALLALL=tous RÉINSTALLMODE=omus / l*v journal.txt

cela "réparera" votre application. Maintenant, regardez le fichier log et cherchez "UpgradeCode". Cette valeur est sous-évaluées.

NOTE: vous ne devez faire cela que si vous êtes sûr que réinstaller flow est implémenté correctement et cela ne cassera pas votre application installée.

64
répondu Yan Sklyarenko 2017-10-11 07:23:43

il faut un certain temps pour retourner les résultats, facilement plusieurs dizaines de secondes, mais wmic fonctionne bien et peut être scripté:

wmic product where "Name like '%Word%'" get Name, Version, IdentifyingNumber

résultat:

IdentifyingNumber                       Name                                      Version
{90140000-001B-0409-0000-0000000FF1CE}  Microsoft Office Word MUI (English) 2010  14.0.6029.1000

le IdentifingNumber est le code du produit. Je n'ai pas vu de propriété pour Upgradedecode, mais peut-être qu'elle pourrait être enterrée sous autre chose. Voir http://quux.wiki.zoho.com/WMIC-Snippets.html pour de nombreux autres exemples, y compris désinstaller :

wmic path win32_product where "name = 'HP Software Update'" call Uninstall
16
répondu matt wilkie 2013-07-25 23:56:04

à tout le monde en utilisant:

Get-WMIObject win32_product

vous devez être conscient que cela va exécuter une auto-guérison sur chaque application MSI simple installé sur le PC. Si vous deviez vérifier eventvwr il dira qu'il a fini de reconfigurer chaque produit.

dans ce cas, j'utilise ce qui suit (un mélange de la méthode de Yan Sklyarenko):

$Reg = @( "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*", "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*" )
$InstalledApps = Get-ItemProperty $Reg -EA 0
$WantedApp = $InstalledApps | Where { $_.DisplayName -like "*<part of product>*" }

maintenant si vous deviez taper:

$WantedApp.PSChildName

vous recevrez le

PS D:\SCCM> $WantedApp.PSChildName
{047904BA-C065-40D5-969A-C7D91CA93D62}

si votre organisation utilise des charges de MST lors de l'installation d'applications, vous voudriez éviter d'exécuter des auto-heals encase ils retournent certains paramètres cruciaux.

  • Note - cela va trouver votre code de produit, puis la mise à niveau peut être trouvé comme Yan mentionné. J'ai l'habitude, même si, il suffit d'utiliser soit " InstEd It!'or' Orca ' puis aller à la table de la propriété du MSI et il les répertorie tout en haut.
10
répondu xBr0k3n 2014-09-24 08:33:51

si vous avez MSI installer l'ouvrir avec Orca (outil de Microsoft), propriété de la table (lignes UpgradeCode, code de produit, version de produit etc) ou code de mise à niveau de la colonne de mise à niveau de la table.

Try to find instller via registry: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall find required subkey and watch value InstallSource. Peut-être que vous pourrez trouver le fichier MSI en chemin.

8
répondu vinogradniy 2013-05-28 10:03:43

Powershell gère des tâches comme ça assez facilement:

$productCode = (gwmi win32_product | `
                ? { $_.Name -Like "<PRODUCT NAME HERE>*" } | `
                % { $_.IdentifyingNumber } | `
                Select-Object -First 1)

, Vous pouvez alors l'utiliser pour obtenir les informations de désinstallation ainsi:

$wow = ""
$is32BitInstaller = $True # or $False

if($is32BitInstaller -and [System.Environment]::Is64BitOperatingSystem) 
{
    $wow = "\Wow6432Node" 
}

$regPath = "HKEY_LOCAL_MACHINE\SOFTWARE$wow\Microsoft\Windows\CurrentVersion\Uninstall"

dir "HKLM:\SOFTWARE$wow\Microsoft\Windows\CurrentVersion\Uninstall" | `
? { $_.Name -Like "$regPath$productCode"  }
6
répondu codekaizen 2014-08-10 16:52:31

dans Windows 10 preview build avec PowerShell 5 , je peux voir que vous pouvez faire:

$info = Get-Package -Name YourInstalledProduct
$info.Metadata["ProductCode"]

pas familier avec même pas sûr si tous les produits a Upgredecode, mais selon ce post vous devez rechercher Upgredecode à partir de ce chemin de registre:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UpgradeCodes

malheureusement, les valeurs clés du Registre sont le code produit et les clés du Registre sont le code de mise à jour.

3
répondu batbaatar 2017-08-11 19:55:54

vous pouvez utiliser les méthodes MsiEnumProductsEx et MsiGetProductInfoEx pour énumérer toutes les applications installées sur votre système et faire correspondre les données à votre application

2
répondu Ciprian 2011-02-21 09:42:56

une autre solution trop compliquée, avec l'avantage de ne pas avoir à réinstaller l'application comme la solution précédente requis. Pour cela, vous devez avoir accès au msi (ou à un setup.exe avec le msi intégré).

si vous avez Visual Studio 2012 (ou d'autres éditions) et installez le" InstallShield LE " gratuit, alors vous pouvez créer un nouveau projet d'installation en utilisant InstallShield.

L'une des options de configuration L'étape" organisez votre installation "s'appelle"Upgrade Paths". Ouvrez les propriétés pour les chemins de mise à niveau, et dans le volet droit de gauche, cliquez sur "Upgrade Paths" et sélectionnez "New Upgrade Path" ... maintenant, naviguez vers le msi (ou setup.exe contenant le msi) et cliquez sur "ouvrir". Le code de mise à jour sera affiché dans la page Paramètres dans le volet de droite que vous devriez maintenant Voir.

0
répondu TCC 2013-09-24 20:00:15

N'avait trouvé aucun moyen de découvrir le code de mise à niveau d'une application installée, avant de voir Yan Sklyarenko s workaround (actuellement) ci-dessus. Mais si vous / quelqu'un d'autre pourrait trouver un moyen de découvrir (au moins) le code de mise à jour et le code de produit d'un MSI, lisez la suite.

de http://www.dwarfsoft.com/blog/2010/06/22/msi-package-code-fun / , modifié pour permettre (lorsqu'il est lancé avec wscript.exe ) une boîte popup d'information par MSI (Municated at 1023 chars, due to wscript.echo limitation); capable d'entrer MSI(s) à partir de l'interface graphique ainsi que le CLI; une validation de base d'entrée humaine; supprimé code de débogage (' Set oDatabase) et 1 bug fix (DB.OpenView).

'Created by:   Chris Bennett
'Created Date: 22/06/2010
'Description:
'   Opens up MSI file(s) Passed as Arguments & returns ProductName, ProductCode,
'   The HKCR key created from ProductCode (a Packed GUID of ProductCode), the 
'   PackageCode and the UpgradeCode of the MSI. Much quicker than getting these
'   out of the MSI's the Manual Way.

References:

http://msdn.microsoft.com/en-us/library/aa369794%28VS.85%29.aspx http://www.eggheadcafe.com/forumarchives/platformsdkmsi/Jan2006/post25948124.asp

if wscript.arguments.count = 0 then
  MSIs = inputbox("Enter in * delimited list of MSI's to query (Max 254 characters)", "MSI Product Details")
  MSIs = split(MSIs,"*")
else
  set MSIs = wscript.arguments
end if

set objFS = createobject("scripting.filesystemobject")
For Each MSIPath in MSIs
  if objFS.fileexists(MSIPath) then
    Set MSIDetails = EvaluateMSI(MSIPath)
    MSIDetails = MSIPath & ": " & vbcrlf & vbcrlf & "Product Name: " &_
    MSIDetails("ProductName") & vbcrlf & "Product Code: " &_
    MSIDetails("ProductCode") & vbcrlf & "Product Key : " &_
    "HKCR\Installer\Products\" & PackGUID(MSIDetails("ProductCode")) &_
    vbcrlf & "Package Code: " & MSIDetails("PackageCode") & vbcrlf &_
    "Upgrade Code: " & MSIDetails("UpgradeCode") & vbcrlf
    WScript.Echo MSIDetails
  else
    wscript.echo "Inaccessible; Non-existant; or Error in Path for:" & vbcrlf & MSIPath & vbcrlf & "... skipping"
  end if
Next

Function EvaluateMSI(MSIPath)
  On Error Resume Next
  ' create installer object
  Set oInstaller = CreateObject("WindowsInstaller.Installer")
  ' open msi in read-only mode
  Set oDatabase = oInstaller.OpenDatabase(MSIPath, 0)
  Set objDictionary = CreateObject("Scripting.Dictionary")
  ' Get Package Code from Summary Information Stream   
  Set streamobj = oDatabase.SummaryInformation(0) '0 = read only
  objDictionary("PackageCode") = streamobj.Property(9)
  ' Get Product Name from MSI Database
  Set View = oDatabase.OpenView("Select `Value` From Property WHERE `Property`='ProductName'")
  View.Execute
  Set ProductName = View.Fetch
  objDictionary("ProductName") = ProductName.StringData(1)

  ' Get Product Code from MSI Database
  Set View = oDatabase.OpenView("Select `Value` From Property WHERE `Property`='ProductCode'")
  View.Execute
  Set ProductCode = View.Fetch
  objDictionary("ProductCode") = ProductCode.StringData(1)

  ' Get Upgrade Code from MSI Database
  Set View = oDatabase.OpenView("Select `Value` From Property WHERE `Property`='UpgradeCode'")
  View.Execute
  Set UpgradeCode = View.Fetch
  objDictionary("UpgradeCode") = UpgradeCode.StringData(1)

  Set EvaluateMSI = objDictionary
  On Error Goto 0
End Function

Function PackGUID(guid)  
  PackGUID = ""  
  '*  
  Dim temp  
  temp = Mid(guid,2,Len(guid)-2)  
  Dim part  
  part = Split(temp,"-")  
  Dim pack  
  pack = ""  
  Dim i, j  
  For i = LBound(part) To UBound(part)
    Select Case i
      Case LBound(part), LBound(part)+1, LBound(part)+2
        For j = Len(part(i)) To 1 Step -1  
          pack = pack & Mid(part(i),j,1)  
        Next  
      Case Else
        For j = 1 To Len(part(i)) Step 2  
          pack = pack & Mid(part(i),j+1,1) & Mid(part(i),j,1)  
      Next  
    End Select
  Next  
  '*  
  PackGUID = pack  
End Function

si on a besoin de copier & coller l'un des GUID's dans le popup, j'ai tendance à le trouver le plus facile d'utiliser une boîte de saisie ultérieure, comme inputbox "","",MSIDetails

0
répondu user66001 2017-05-23 12:25:54

si vous n'avez pas le msi et que vous avez besoin du code de mise à niveau, plutôt que du Code produit, alors la réponse est ici: Comment puis-je trouver le code de mise à niveau pour une application installée dans C#?

0
répondu krispy 2017-05-23 11:54:31