Как найти GUID продукта установленной установки MSI?

Мне нужно найти GUID продукта на установить файл MSI для выполнения обслуживания, такого как исправление, удаление, а также для целей аудита.

1 ответов


Короткая Версия

информация ниже значительно выросла с течением времени и, возможно, стала немного слишком сложной. как быстро получить коды продуктов? (четыре подхода):

1. Используйте Powershell "One-liner"

прокрутите вниз для скриншота и шаг за шагом. Отказ от ответственности также ниже - незначительные или умеренные риски, в зависимости от того, кто вы спрашиваете. Мне подходит. Любой самостоятельного ремонта срабатывает с помощью этой опции как правило, можно отменить. The проверка целостности пакета triggered добавляет некоторый журнал событий "шум", хотя. Примечание! IdentifyingNumber is the ProductCode (особенность WMI).

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

быстрый запуск Powershell: hold клавиша Windows, нажмите R, введите "powershell" и нажмите Enter

2. Использовать VBScript

описано ниже в разделе "альтернативные инструменты" (раздел 3). Этот параметр может быть безопасное чем Powershell по причинам, подробно описанным ниже. В сущности это (много)быстрее и не способен запускать MSI self-repair, так как он не проходит через WMI (он обращается к MSI COM API напрямую - на скорость). однако он более задействован, чем параметр Powershell (несколько строк кода).

3. Регистратура Поиск

некоторые клянутся, глядя вещи в реестре. Не мой рекомендуемый подход - мне нравится проходить через правильные API (или другими словами: вызовы функций ОС). Всегда есть странные исключения, учитываемые только внутренними компонентами API-реализации:

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

4. Исходный файл MSI / Wix Source

вы можете найти Product Code in the Property table любого файла MSI (и любого другого свойства). Однако GUID может быть (редко) переопределен преобразованием, применяемым во время установки, и, следовательно, не соответствует GUID, под которым зарегистрирован продукт (подход 1 и 2 выше сообщит реальный код продукта - который зарегистрирован в Windows - в таких редких сценариях).

вам нужен инструмент для просмотра файлов MSI. См. в нижней части следующего ответа список бесплатных инструменты, которые вы можете скачать (или см. быстрый вариант ниже): как я могу сравнить содержимое двух (или более) файлов MSI?

обновление: для удобства и потребность в скорости :-), скачать SuperOrca без промедления и суеты от это прямая - скачать hotlink - инструмент достаточно хорош, чтобы выполнить работу - установить, открыть MSI и перейти прямо к таблица свойств и найти ProductCode строки (пожалуйста, всегда проверяйте вирус прямой-скачать hotlink-очевидно - вы можете использовать virustotal.com для этого-онлайн-сканирование с использованием десятков антивирусных и вредоносных программ для сканирования того, что вы загружаете).


и ниже вы найдете оригинальный ответ, который "органично" в много деталей.

может ознакомиться с "удаление пакетов MSI" раздел ниже, если это задача, которую вам нужно выполнять.


Получить Коды Продукта

обновление: Если Вам также нужно Обновить код, проверьте этот ответ: как найти код обновления для установленного файла MSI? (извлекает связанные коды продукта, коды подъема & названия продукта внутри вывод таблицы - аналогичен приведенному ниже).

  • не удается использовать PowerShell? В Разделе "Альтернатива Инструменты " раздел ниже.
  • хотите удалить? см. раздел "удаление пакетов MSI" ниже.

пожар Powershell (удерживая клавишу Windows, нажмите R, отпустите клавишу Windows, введите "powershell" и нажмите OK) и выполните приведенную ниже команду, чтобы получить список установленных пакетов MSI код продукции вместе с путь к пакету локального кэша и товар имя (разверните окно PowerShell, чтобы избежать усеченных имен).

перед запуском этой командной строки, пожалуйста, прочитайте отказ от ответственности ниже (ничего опасного, просто некоторые потенциальные неприятности). Раздел 3 в разделе "альтернативные инструменты" показывает альтернативный не-WMI способ получить ту же информацию с помощью VBScript. Если вы пытаетесь удалить пакет, ниже приведен раздел с некоторым образцом msiexec.команды исполняемые строки:

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

на выход должны будьте похожи на это:

enter image description here

внимание! по какой-то странной причине "ProductCode" называется "IdentifyingNumber" в WMI. Другими словами - на картинке над номером is код продукта.

Если вам нужно запустите этот запрос удаленно против множества удаленных компьютеров в разделе " Получить Коды Продуктов С Пульта Дистанционного Управления Компьютер!--41--> раздел" ниже.

отказ от ответственности (важно, пожалуйста, прочитайте перед выполнением команды!): Из-за странного дизайна Microsoft любой вызов WMI Win32_Product (как и команда PowerShell ниже) вызовет проверка пакет недвижимости. Кроме того, что медленно, это может в редких случаях запустите саморемонт MSI. Это может быть небольшой пакет или что-то огромная, как Visual Studio. В большинстве случаев этого не происходит - но есть риск. не запускайте эту команду прямо перед важным встреча - это не опасно (это для чтения), но это может приводят к длительному ремонту в очень редких случаях (я думаю, вы можете отменить self-repair также-если активно не предотвращен рассматриваемым пакетом, но он перезапустится, если вы вызовете Win32_Product снова и это будет продолжаться, пока вы не позволите закончить саморемонт - иногда это может продолжаться, даже если вы это позволите конец:как определить, что вызывает повторный саморемонт установщика Windows?).

и просто для записи: некоторые люди сообщают, что их журналы событий заполняются записями Msiinstaller EventID 1035 (см. ответ начальника кода) - по-видимому, вызвано запросами WMI к классу Win32_Product (лично я никогда этого не видел). Это не непосредственно связано с командой Powershell, предложенной выше, это в контексте общего использование класса Wim Win32_Product.

вы также можете получить результат в виде списка (вместо таблицы):

get-wmiobject -class Win32_Product

в этом случае вывод аналогичен этому:

enter image description here


Получить Коды Продуктов С Удаленного Компьютера

теоретически вы должны просто указать имя удаленного компьютера как часть самой команды. Вот та же команда, что и выше, настроенная для запуска на машине "RemoteMachine" ( добавить):

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

это может сработать, если вы работаете с правами администратора домена в соответствующем домене. В среде рабочей группы (небольшой офис / домашняя сеть), вероятно, необходимо добавить учетные данные пользователя непосредственно к вызовам WMI, чтобы заставить его работать.

кроме того, на удаленные подключения в WMI влияет (по крайней мере)Брандмауэр Windows, настройки DCOM и Контроль Учетных Записей Пользователей (UAC) (плюс любые дополнительные факторы, отличные от Microsoft-например реальные брандмауэры, сторонние программные брандмауэры, программное обеспечение безопасности различных видов, etc...). Будет ли она работать или нет зависит от вашей точной настройки.

обновление: An обширный раздел о удаленном запуске WMI можно найти в этом ответе:как найти код обновления для установленного файла MSI?. Появляется правило брандмауэра и подавление приглашения UAC через настройку реестра может заставить вещи работать в сетевой среде рабочей группы. Не рекомендуется изменять безопасность, но это сработало для меня.


Альтернативные Инструменты

PowerShell требуется .NET framework будет установлен (в настоящее время в версии 3.5.1 кажется? Октября 2017 года). Само приложение PowerShell также может отсутствовать С компьютера, даже если установлен .NET. Наконец, я считаю, что PowerShell может быть отключено или заблокировано различными системными политиками и привилегиями.

если это так, вы можете попробовать несколько других способов получить коды продукта. Моя предпочтительная альтернатива VBScript - оно быстр и гибок (но может также быть заблокирован на определенных машинах, и сценарии всегда немного более задействованы, чем использование инструментов).

  1. С встроенный инструмент Windows WMI: wbemtest.exe.
    • запуск wbemtest.exe (удерживайте клавишу Windows, нажмите R, отпустите клавишу Windows, введите " wbemtest.exe" и нажмите OK).
    • клик подключиться а то OK (по умолчанию пространство имен root\cimv2) и нажмите "подключиться" снова.
    • нажмите "запрос " и введите это команда WQL (вкус SQL):SELECT IdentifyingNumber,Name,Version FROM Win32_Product и нажмите "Использовать" (или эквивалент - инструмент будет локализован).
    • пример вывода скриншота (усеченный). Не самое приятное форматирование, но вы можете получить необходимые данные. IdentifyingNumber-это продукт MSI код:

wbemtest.exe

  1. затем вы можете попробовать пользовательский, более полнофункциональный инструмент WMI, такой как WMIExplorer.exe