Jak mogę znaleźć identyfikator GUID produktu zainstalowanej konfiguracji MSI?

Muszę znaleźć GUID produktu dla zainstalowanego pliku MSI w celu przeprowadzenia konserwacji, takiej jak łatanie, Odinstalowywanie, a także do celów audytu.

Author: Stein Åsmul, 2015-04-29

1 answers

Wersja Skrócona

Poniższe informacje znacznie wzrosły w czasie i mogły stać się nieco zbyt rozbudowane. jak szybko uzyskać kody produktów? (cztery podejścia):

1. Użyj Powershell "one-liner"

przewiń w dół, aby wyświetlić zrzut ekranu i krok po kroku . Zrzeczenie się również poniżej-niewielkie lub umiarkowane ryzyko w zależności od tego, kogo zapytasz. Mi pasuje. Każda samodzielna naprawa wywołana tą opcją powinna być ogólnie możliwa do odwołaj. Wywołane sprawdzenie integralności pakietu powoduje dodanie "szumu" dziennika zdarzeń. Uwaga ! IdentifyingNumber jest ProductCode (WMI).

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

Szybki start Powershell: przytrzymaj klawisz Windows, dotknij R , wpisz "powershell" i naciśnij Enter

2. Użyj VBScript

Opisane poniżej w sekcji "narzędzia alternatywne " (sekcja 3). Ta opcja może być bezpieczniejsza niż Powershell z powodów wyjaśnione szczegółowo poniżej. W istocie jest (znacznie) szybszy i nie jest w stanie uruchomić samonaprawy MSI, ponieważ nie przechodzi przez WMI (uzyskuje bezpośredni dostęp do MSI COM API z błyskawiczną prędkością). jest jednak bardziej zaangażowany niż opcja Powershell (kilka linijek kodu).

3. Wyszukiwanie Rejestru

Niektórzy przeklinają szukając rzeczy w rejestrze. Nie moje zalecane podejście-Lubię przeglądać odpowiednie API (lub innymi słowy: OS wywołania funkcji). Zawsze istnieją dziwne wyjątki rozliczane tylko przez wewnętrzne implementacje API:
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
  • HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
  • HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall

4. Oryginalny plik MSI / WiX Source

Możesz znaleźć Product Code W Property table dowolnego pliku MSI (i każdej innej właściwości). Jednak identyfikator GUID może być (rzadko) przesłonięty przez transformację zastosowaną w czasie instalacji i dlatego nie pasuje do identyfikatora GUID, który jest produktem zarejestrowany pod (podejście 1 i 2 powyżej zgłosi prawdziwy kod produktu-który jest zarejestrowany w systemie Windows-w tak rzadkich scenariuszach).

Potrzebujesz narzędzia do przeglądania plików MSI . Poniżej znajduje się lista darmowych narzędzi, które możesz pobrać (lub zobacz szybką opcję poniżej): Jak mogę porównać zawartość dwóch (lub więcej) plików MSI?

UPDATE: dla wygody i need for speed : -), Pobierz SuperOrca bez opóźnień i zamieszania z to direct-download hotlink - narzędzie jest wystarczająco dobre, aby wykonać zadanie - zainstaluj, otwórz MSI i idź prosto do Tabela Właściwości i znajdź ProductCode wiersz (proszę zawsze sprawdzać Bezpośrednie-download hotlink-oczywiście - możesz użyć virustotal.com aby to zrobić - skanowanie online z wykorzystaniem dziesiątek pakietów antywirusowych i złośliwego oprogramowania do skanowania tego, co przesyłasz).


A poniżej znajdziesz oryginalna odpowiedź, która "organicznie urosła" do wielu szczegółów.

Może zajrzyj do sekcji "Odinstaluj Pakiety MSI" poniżej, jeśli jest to zadanie, które musisz wykonać.


Odzyskaj Kody Produktów

UPDATE : jeśli potrzebujesz również kodu update , sprawdź tę odpowiedź: Jak mogę znaleźć kod uaktualnienia zainstalowanego pliku MSI? (pobiera powiązane kody produktów, kody aktualizacji i nazwy produktów w a wyjście tabeli - podobne do poniższego).

  • Nie możesz używać PowerShell? patrz sekcja "narzędzia alternatywne" poniżej.
  • chcesz odinstalować? patrz sekcja "Odinstaluj Pakiety MSI" poniżej.

Fire up Powershell (przytrzymaj klawisz Windows, dotknij R, zwolnij klawisz Windows, wpisz "powershell" i naciśnij OK ) i uruchom poniższe polecenie, aby wyświetlić listę zainstalowanych pakietów MSI kody produktów wraz ze ścieżką lokalnego pakietu pamięci podręcznej i nazwą produktu (zmaksymalizuj okno PowerShell, aby uniknąć obciętych nazw).

Przed uruchomieniem tej linii poleceń, przeczytaj poniższą klauzulę (nic niebezpiecznego, tylko niektóre potencjalne uciążliwości). Sekcja 3 pod "narzędzia alternatywne" pokazuje alternatywny sposób uzyskiwania tych samych informacji za pomocą języka VBScript bez WMI. Jeśli próbujesz odinstalować pakiet, poniżej znajduje się sekcja z przykładowym msiexec.polecenie exe linie:

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

Wyjście powinno być podobne do tego:

Tutaj wpisz opis obrazka

Uwaga! z jakiegoś dziwnego powodu "ProductCode" jest określany jako "IdentifyingNumber" W WMI. Innymi słowy-na powyższym obrazku numer identyfikacyjny to Kod produktu.

Jeśli potrzebujesz uruchomić to zapytanie zdalnie na wielu zdalnych komputerach , zobacz " Pobierz kody produktów z pilota Komputer " sekcja poniżej.

DISCLAIMER (Ważne, Przeczytaj przed uruchomieniem polecenia!): Ze względu na dziwną konstrukcję Microsoft, każde wywołanie WMI do Win32_Product (podobnie jak polecenie PowerShell poniżej) spowoduje walidację pakiet nieruchomości . Poza byciem dość powolnym , może to w rzadkich przypadkach Uruchom Sam naprawiam MSI. To może być mały pakiet lub coś wielkie-jak Visual Studio. W większości przypadków tak się nie dzieje - ale tam to ryzyko. nie uruchamiaj tego polecenia tuż przed ważnym spotkanie-nigdy nie jest niebezpieczne (jest tylko do odczytu), ale może prowadzić do długiej naprawy w bardzo rzadkich przypadkach (myślę, że można anulować samo-naprawa również-chyba, że aktywnie uniemożliwia to dany pakiet, ale uruchomi się ponownie, jeśli wywołasz Win32_Product jeszcze raz i będzie to trwało, dopóki nie pozwolisz, aby samo-Naprawa się skończyła-czasami może trwać, nawet jeśli pozwolisz jej skończyć: jak Mogę określić, co powoduje wielokrotną naprawę Instalatora Windows?).

I tak dla przypomnienia: niektórzy zgłaszają swoje dzienniki zdarzeń wypełniające się wpisami Msiinstaller EventID 1035 (zobacz odpowiedź szefa kodu) - najwyraźniej spowodowane zapytaniami WMI do klasy Win32_Product (osobiście nigdy tego nie widziałem). Jest to nie {[35] } bezpośrednio związane z poleceniem Powershell sugerowanym powyżej, jest to w kontekście ogólnego użycia klasy WIM Win32_Product.

Możesz uzyskaj również wynik w postaci listy (zamiast tabeli):

get-wmiobject -class Win32_Product

W tym przypadku wyjście jest podobne do tego:

Tutaj wpisz opis obrazka


Pobierz Kody Produktów Ze Zdalnego Komputera

Teoretycznie powinieneś być w stanie podać nazwę zdalnego komputera jako część samego polecenia. Tutaj jest to samo polecenie jak powyżej ustawione do uruchomienia na maszynie "RemoteMachine" (Dodano sekcję -ComputerName RemoteMachine):

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

Może to działać, jeśli używasz administratora domeny prawa na odpowiedniej domenie. W środowisku grup roboczych (mała sieć biurowa / domowa) prawdopodobnie musisz dodać poświadczenia użytkownika bezpośrednio do połączeń WMI, aby to działało.

[[33]} dodatkowo, na połączenia zdalne WMI ma wpływ (przynajmniej) Zapora systemu Windows, ustawienia DCOM i Kontrola konta użytkownika (UAC) (plus wszelkie dodatkowe czynniki spoza firmy Microsoft-na przykład[34]} prawdziwe zapory sieciowe, zapory oprogramowania innych firm, bezpieczeństwo oprogramowanie różnego rodzaju, itp...). To, czy będzie działać, zależy od Twojej dokładnej konfiguracji.

UPDATE : obszerna sekcja na temat zdalnego uruchamiania WMI znajduje się w tej odpowiedzi: Jak mogę znaleźć kod aktualizacji dla zainstalowanego pliku MSI?. Pojawia się reguła zapory i tłumienie monitu UAC za pośrednictwem rejestru tweak może sprawić, że wszystko będzie działać w środowisku sieciowym grup roboczych. Niezalecane zmiany pod względem bezpieczeństwa, ale u mnie zadziałało.


Alternatywne Narzędzia

PowerShell wymaga . NET framework do zainstalowania (obecnie w wersji 3.5.1 wydaje się? Październik, 2017). Program PowerShell może również zostać pominięty na komputerze, nawet jeśli zainstalowano. NET. W końcu uważam, że PowerShell może być wyłączony lub zablokowany przez różne zasady i przywileje systemu.

Jeśli tak jest, można spróbować kilka innych sposobów, aby pobrać kody produktów. Moją preferowaną alternatywą jest VBScript - jest szybki i elastyczny (ale może być również zablokowany na niektórych maszynach, a skrypty są zawsze trochę bardziej zaangażowane niż narzędzia).

  1. Zacznijmy od wbudowanego narzędzia WMI Windows: wbemtest.exe.

    • uruchomienie wbemtest.exe (przytrzymaj klawisz Windows, dotknij R, zwolnij Klawisz Windows, wpisz "wbemtest.exe " i naciśnij OK ).
    • Kliknij connect, a następnie OK (domyślnie przestrzeń nazw to root\cimv2), a następnie kliknij" connect " ponownie.
    • Kliknij " Query " i wpisz polecenie WQL (SQL): SELECT IdentifyingNumber,Name,Version FROM Win32_Product i kliknij "Użyj" (lub równoważne - narzędzie będzie zlokalizowane).
    • przykładowy zrzut ekranu wyjściowego (okrojony). Nie jest to najładniejsze formatowanie, ale możesz uzyskać potrzebne dane. IdentifyingNumber is the Kod produktu MSI :

wbemtest.exe

  1. Następnie możesz wypróbować niestandardowe, bardziej funkcjonalne narzędzie WMI, takie jak WMIExplorer.exe

    • nie jest to zawarte w systemie Windows. Jest to jednak bardzo dobre narzędzie. Polecam.
    • Zobacz na: https://github.com/vinaypamnani/wmie2/releases
    • uruchom narzędzie, kliknij Connect, kliknij dwukrotnie ROOT \ CIMV2
    • z zakładki " Query ", wpisz po zapytaniu {[21] } i naciśnij Execute.
    • zrzut ekranu pominięty, aplikacja wymaga zbyt dużej powierzchni ekranu.
  2. Wreszcie możesz wypróbować VBScript , aby uzyskać dostęp do informacji za pośrednictwem interfejsu automatyzacji MSI (podstawowa funkcja systemu Windows - jest niezwiązana z WMI ).

    • skopiuj poniższy skrypt i wklej do *.plik vbs na pulpicie i spróbuj go uruchomić, klikając dwukrotnie. Twój pulpit musi być zapisywalny dla Ciebie, możesz też użyć dowolnego innego zapisywalnego miejsca.
    • to nie jest świetny VBScript. Terseness został preferowany nad obsługą błędów i kompletnością, ale powinien wykonać zadanie z minimalną złożonością.
    • plik wyjściowy jest tworzony w folderze, z którego uruchamiany jest skrypt (folder musi być zapisywalny ). Plik wyjściowy nazywa się msiinfo.csv.
    • Kliknij dwukrotnie plik, aby otworzyć w aplikacji arkusza kalkulacyjnego, wybierz przecinek jako ogranicznik przy imporcie-lub-po prostu otwórz plik w notatniku lub dowolnej przeglądarce tekstu.
    • otwarcie w arkuszu kalkulacyjnym pozwoli na zaawansowane funkcje sortowania.
    • ten skrypt można łatwo dostosować, aby pokazać znaczną ilość dalszych szczegółów na temat instalacji MSI . Demonstracja tego znajduje się tutaj: jak dowiedzieć się, które produkty są zainstalowane-nowsze produkty są już zainstalowane 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

Nie mogę myśleć o żadnym innym ogólnym celu opcje, aby pobrać kody produktów w tej chwili, proszę dodać, jeśli wiesz o żadnych. po prostu edytuj inline zamiast dodawać zbyt wiele komentarzy proszę.

Z pewnością możesz uzyskać dostęp do tych informacji z poziomu aplikacji poprzez wywołanie interfejsu automatyki MSI (opartego na COM) lub C++ Funkcje instalatora MSI (Win32 API). Lub nawet korzystać z zapytań WMI z poziomu aplikacji, jak w powyższych przykładach, używając PowerShell, wbemtest.exe lub WMIExplorer.exe.


Odinstaluj Pakiety MSI

Jeśli chcesz odinstalować pakiet MSI , dla którego znalazłeś Kod produktu, możesz to zrobić w następujący sposób za pomocą podwyższonego wiersza polecenia (wyszukaj cmd.exe , kliknij prawym przyciskiem myszy i Uruchom jako admin):

Opcja 1: Podstawowa, interaktywna Deinstalacja bez logowania (szybko i łatwo):

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

Szybki Parametr Wyjaśnienie:

/X = run uninstall sequence
{00000000-0000-0000-0000-00000000000C} = product code for product to uninstall
Jeśli chcesz, możesz również włączyć (werbalne) logowanie i uruchomić w trybie cichym, co prowadzi do opcji 2:

Opcja 2: Cicha Deinstalacja z pełnym logowaniem (lepiej dla plików wsadowych):

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

Szybkie Wyjaśnienie Parametru:

/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

Istnieje obszerne odniesienie do odinstalowywania MSI tutaj (różne różne sposoby odinstalowywania pakietów MSI): odinstalowanie pliku MSI z polecenia linia bez użycia msiexec . Istnieje wiele różnych sposobów odinstalowania.

jeśli piszesz plik wsadowy, spójrz na sekcję 3 w powyższym linked answer dla kilku popularnych i standardowych wariantów linii poleceń dezinstalacji.

I Szybki link do msiexec.exe (opcje wiersza poleceń) (przegląd wiersza poleceń dla msiexec.exe z MSDN). Oraz wersja Technet też.


[[31]} pobieranie innych właściwości / Informacji MSI (f.ex Upgrade Code)

UPDATE : proszę znaleźć Nowa odpowiedź, jak znaleźć kod aktualizacji dla zainstalowanych pakietów zamiast ręcznie szukać kodu w plikach MSI. Na zainstalowane pakiety jest to o wiele bardziej niezawodne. Jeśli opakowanie nie jest zainstalowany, nadal trzeba szukać w pliku MSI (lub pliku źródłowym używany do kompilacji MSI), aby znaleźć kod aktualizacji. Zostawić w starszej sekcji poniżej:

Jeśli chcesz uzyskać UpgradeCode lub inne właściwości MSI , możesz otworzyć buforowaną instalację MSI dla produktu z lokalizacji określonej przez " LocalPackage " na powyższym obrazku (coś w stylu: C:\WINDOWS\Installer\50c080ae.msi - jest to nazwa pliku szesnastkowego, unikalna w każdym systemie). Następnie zajrzyj do "Property table " dla kodu UpgradeCode (możliwe jest ponowne zdefiniowanie kodu UpgradeCode w transformie - aby mieć pewność, że otrzymasz prawidłowa wartość musisz pobrać kod programowo z systemu-wkrótce podam do tego skrypt. Jednak Kod aktualizacji znaleziony w pamięci podręcznej MSI jest ogólnie poprawny).

Aby otworzyć buforowane pliki MSI, użyj Orka lub innego narzędzia do pakowania. Oto omówienie różnych narzędzi (każdy z nich zrobi): jakiego produktu instalacyjnego użyć? InstallShield, WiX, Wise, Advanced Installer, etc . Jeśli nie masz takiego narzędzia zainstalowane, Twoim najszybszym zakładem może być wypróbowanie Super Orca (jest prosty w użyciu, ale nie testowany przeze mnie).

UPDATE : oto nowa odpowiedź z informacjami o różnych darmowych produktach, których możesz użyć do przeglądania plików MSI: Jak mogę porównać zawartość dwóch (lub więcej) plików MSI?

Jeśli masz zainstalowany Visual Studio , spróbuj wyszukać Orca-x86_en-us.msi - Pod Program Files (x86) - i zainstaluj go (jest to własna, oficjalna przeglądarka MSI firmy Microsoft i redaktor). Następnie znajdź orkę w menu start. Go Czas w krótkim czasie: -). Technicznie Orca jest instalowany jako część Windows SDK (nie Visual Studio), ale Windows SDK jest dołączony do instalacji Visual Studio. jeśli nie masz zainstalowanego Visual Studio, może znasz kogoś, kto ma? Wystarczy, że wyszukają tego MSI i wyślą (jest to mały plik pół mb) - powinno im to zająć kilka sekund. UPDATE: potrzebujesz kilku plików CAB, a także MSI - znajdują się one w tym samym folderze gdzie znajduje się MSI. Jeśli nie, zawsze możesz pobrać Windows SDK (jest darmowy, ale jest duży - a wszystko, co zainstalujesz, spowolni twój komputer). Nie jestem pewien, która część SDK instaluje Orca MSI. Jeśli tak, po prostu Edytuj i dodaj szczegóły tutaj.



Podobne tematy (dla odniesienia i łatwego dostępu-powinienem wyczyścić tę listę):

 81
Author: Stein Åsmul,
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
2018-08-16 16:22:59