Jak znaleźć kod aktualizacji i Kod produktu zainstalowanej aplikacji w systemie Windows 7

Mam zainstalowaną aplikację na moim komputerze. Mam również jego kod źródłowy, ale jakoś Kod produktu i UpgradeCode tej aplikacji zostały zmienione.

Teraz chcę uzyskać UpgradeCode i ProductCode tej zainstalowanej aplikacji. Czuję, że musi być do tego jakieś narzędzie.

Czy ktoś może mi dać znać jak uzyskać UpgradeCode i ProductCode zainstalowanej aplikacji?

Author: Martin Prikryl, 2011-02-21

10 answers


Ważne: minęło trochę czasu, odkąd ta odpowiedź została pierwotnie opublikowana, a mądrzy ludzie wymyślili mądrzejsze odpowiedzi. Sprawdź Jak mogę znaleźć kod uaktualnienia zainstalowanego pliku MSI? od @ Stein Åsmul jeśli potrzebujesz solidnego i kompleksowego podejścia.


Oto inny sposób (nie potrzebujesz żadnych narzędzi):

  • otwórz rejestr systemowy i wyszukaj klucz HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall (jeśli jest to instalator 32-bitowy na 64-bitowym komputerze, może znajdować się pod HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall zamiast tego).
  • GUID wymienione pod tym kluczem są produktami zainstalowanymi na tej maszynie
  • znajdź ten, o którym mówisz - krok po kroku, aż zobaczysz jego nazwę w prawym okienku
Ten identyfikator, na którym się zatrzymałeś, to kod produktu.

Teraz, jeśli jesteś pewien, że reinstalacja tej aplikacji pójdzie dobrze, możesz uruchomić następujący wiersz poleceń:

-warto zobaczyć} REINSTALL=all REINSTALLMODE=omus/l * v log.txt

To "naprawi" Twoją aplikację. Teraz spójrz na plik dziennika i wyszukaj "UpgradeCode". Ta wartość jest tam wyrzucana.

Uwaga: powinieneś to zrobić tylko wtedy, gdy jesteś pewien, że reinstall flow jest poprawnie zaimplementowany i nie zepsuje zainstalowanej aplikacji.

 64
Author: Yan Sklyarenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-11 07:23:43

Zwrócenie wyników zajmuje trochę czasu, łatwo kilkadziesiąt sekund, ale wmic działa dobrze i może być skryptem:

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

Wynik:

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

IdentifingNumber to kod produktu. Nie widziałem własności do UpgradeCode ' a, ale może to może być zakopane pod czymś innym. Zobacz http://quux.wiki.zoho.com/WMIC-Snippets.html dla wielu innych przykładów, w tym uninstall :

wmic path win32_product where "name = 'HP Software Update'" call Uninstall
 16
Author: matt wilkie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-25 23:56:04

Do wszystkich używających:

Get-WMIObject win32_product

Należy pamiętać, że spowoduje to samouzdrawianie każdej aplikacji MSI zainstalowanej na komputerze. Jeśli chcesz sprawdzić eventvwr, powie, że zakończył rekonfigurowanie każdego produktu.

W tym przypadku stosuję następujące (mieszanina metody 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>*" }

Teraz gdybyś napisał:

$WantedApp.PSChildName

Otrzymasz następujące:

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

Jeśli Twoja organizacja korzysta z wielu MST podczas instalacji aplikacje, których chcesz uniknąć, aby nie uruchamiać samonaprawiających się obudów, przywracają niektóre kluczowe ustawienia.

  • uwaga-to znajdzie swój kod produktu, a następnie uaktualnienie można znaleźć, jak wspomniał Yan. Zwykle jednak używam albo " wstawiłem to!'lub' Orca ' następnie przejdź do tabeli właściwości MSI i wyświetli je na górze.
 10
Author: xBr0k3n,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-24 08:33:51

Jeśli masz instalator msi otwórz go za pomocą Orca( narzędzia firmy Microsoft), właściwości table (rows UpgradeCode, ProductCode, Product version itp.) lub Table Upgrade Column Upgrade Code.

Spróbuj znaleźć Installer poprzez rejestr: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall znajdź wymagany podklucz i obserwuj wartość InstallSource. Może po drodze uda ci się znaleźć plik MSI.

 8
Author: vinogradniy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-28 10:03:43

Powershell radzi sobie z takimi zadaniami dość ręcznie:

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

Możesz następnie użyć go, aby uzyskać informacje o odinstalowaniu:

$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
Author: codekaizen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-10 16:52:31

W Windows 10 Preview build z PowerShell 5 widzę, że możesz to zrobić:

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

Nie wiem nawet, czy wszystkie produkty mają UpgradeCode, ale zgodnie z tym postem musisz wyszukać UpgradeCode z tej ścieżki rejestru:

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

Niestety, wartości klucza rejestru to ProductCode, a klucze rejestru to UpgradeCode.

 3
Author: batbaatar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-11 19:55:54

Możesz użyć metod MsiEnumProductsEx i msigetproductinfoex do wyliczenia wszystkich zainstalowanych aplikacji w Twoim systemie i dopasowania danych do Twojej aplikacji

 2
Author: Ciprian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-21 09:42:56

Innym sposobem-zbyt skomplikowane obejście, z korzyścią, że nie trzeba ponownie instalować aplikacji, jak poprzednie obejście wymagane. Wymaga to dostępu do msi (lub konfiguracji).exe z wbudowanym msi).

Jeśli masz Visual Studio 2012 (lub ewentualnie inne wersje) i zainstaluj darmowy "InstallShield LE", możesz utworzyć nowy projekt instalacyjny za pomocą InstallShield.

Jedna z opcji konfiguracji w kroku "Zorganizuj swoją konfigurację" jest wywoływana "Ścieżki Aktualizacji". Otwórz właściwości ścieżek aktualizacji, a w lewym okienku kliknij prawym przyciskiem myszy "ścieżki aktualizacji" i wybierz "Nowa ścieżka aktualizacji"... teraz przejdź do msi (lub setup.exe zawierający msi) i kliknij "Otwórz". Kod uaktualnienia zostanie wypełniony na stronie ustawień w prawym okienku, które powinieneś teraz zobaczyć.

 0
Author: TCC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-24 20:00:15

Przed obejrzeniem Yan Sklyarenko'S } workaround (obecnie) powyżej nie udało się znaleźć sposobu na znalezienie kodu aktualizacji z zainstalowanej aplikacji. Ale jeśli ty / ktoś inny znajdzie sposób, aby dowiedzieć się (przynajmniej) zarówno UpgradeCode, jak i ProductCode z MSI, Czytaj dalej.

Z http://www.dwarfsoft.com/blog/2010/06/22/msi-package-code-fun / , zmodyfikowany, aby umożliwić (po uruchomieniu z wscript.exe) jedno okienko wyskakujące z informacjami na MSI (Trunced at 1023 chars, due to wscript.echo ograniczenie); możliwość wprowadzania MSI (s) Z GUI, jak również CLI; niektóre podstawowe ludzkie wejście walidacji; usunięty kod debugowania (' Set oDatabase) i 1 poprawka błędu (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

Jeśli trzeba skopiować i wkleić dowolny GUID w wyskakującym okienku, Zwykle uważam, że najłatwiej jest użyć kolejne inputbox, jak inputbox "","",MSIDetails

 0
Author: user66001,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:25:54

Jeśli nie masz msi i potrzebujesz kodu upgrade 'u, a nie kodu produktu, odpowiedź jest tutaj: Jak mogę znaleźć kod upgrade' U Dla zainstalowanej aplikacji w C#?

 0
Author: krispy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:31