Дополнительно
Как найти GUID продукта установленной MSI-установки?
Мне нужно найти product GUID для установленного MSI-файла, чтобы выполнить обслуживание, такое как патч
, деинсталляция
(how-to uninstall), а также для аудиторских целей
.
58
2
Быстрый запуск Powershell: удерживайте клавишу Windows, нажмите R, введите "powershell" и нажмите Enter 2.
Использовать VBScript
Описан ниже в разделе "Альтернативные инструменты" (раздел 3). Этот вариант может быть более безопасным, чем Powershell, по причинам, подробно описанным ниже. По сути, он (намного) быстрее и не способен вызвать самовосстановление MSI, поскольку не проходит через 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
Оригинальный MSI файл / WiX Source
Вы можете найти
Код продукта
вТаблице свойств
любого MSI файла (а также любое другое свойство). Однако GUID может быть переопределен (редко) преобразованием, применяемым во время установки, и, следовательно, не соответствовать GUID, под которым зарегистрирован продукт (подходы 1 и 2, описанные выше, сообщают реальный код продукта, зарегистрированный в Windows, в таких редких случаях). Вам нужен инструмент для просмотра файлов MSI. Список бесплатных инструментов, которые можно загрузить, см. в нижней части следующего ответа (или см. быстрый вариант ниже): https://stackoverflow.com/questions/48482545/how-can-i-compare-the-content-of-two-or-more-msi-files/48482546#48482546. ОБНОВЛЕНИЕ: Для удобства и потребности в скорости :-), скачайте SuperOrca без промедления и суеты с этой прямой ссылки - инструмент достаточно хорош для выполнения работы - установите, откройте MSI и перейдите прямо к таблице свойств и найдите строкуProductCode
(всегда проверяйте на вирусы прямые ссылки - очевидно - вы можете использовать virustotal.com для этого - онлайн проверка с использованием десятков антивирусных и вредоносных программ для проверки того, что вы загружаете).вывод должен быть примерно таким: *Примечание! По какой-то странной причине "Код продукта"* в WMI называется "Идентификационный номер". Другими словами, на рисунке выше IdentifyingNumber является ProductCode. Если вам нужно запустить этот запрос удаленно для множества удаленных компьютеров*, смотрите раздел "Retrieve Product Codes From A Remote Computer*" ниже.
В этом случае вывод будет выглядеть следующим образом:
Получение кодов продуктов с удаленного компьютера
Теоретически вы должны иметь возможность указывать имя удаленного компьютера в самой команде. Вот та же команда, что и выше, запущенная на машине "RemoteMachine" (добавлена секция ``-ComputerName RemoteMachine''):
Это может сработать, если вы работаете с правами администратора домена в соответствующем домене. В среде рабочей группы (малый офис / домашняя сеть) вам, вероятно, придется добавить учетные данные пользователя непосредственно в вызовы WMI, чтобы заставить его работать. Кроме того, на удаленные соединения в WMI влияют (как минимум) Windows Firewall, настройки DCOM и User Account Control (UAC) (плюс любые дополнительные факторы, не связанные с Microsoft - например, реальные брандмауэры, программные брандмауэры сторонних производителей, программы безопасности различных видов и т.д.). Будет ли это работать или нет, зависит от вашей точной настройки.
Удаленное подключение к WMI с помощью PowerShell UPDATE: Обширный раздел об удаленном запуске WMI можно найти в этом ответе: https://stackoverflow.com/questions/46637094/how-can-i-find-the-upgrade-code-for-an-installed-msi-file/46637095#46637095. Похоже, что правило брандмауэра и подавление запроса UAC с помощью твика реестра может заставить все работать в сетевой среде рабочей группы. Не рекомендуется вносить изменения с точки зрения безопасности, но для меня это сработало.
Альтернативные инструменты
PowerShell требует установки .NET framework (в настоящее время, кажется, версия 3.5.1? Октябрь, 2017). Само приложение PowerShell может также отсутствовать на машине, даже если .NET установлен. Наконец, я считаю, что PowerShell может быть отключен или заблокирован различными системными политиками и привилегиями. Если это так, вы можете попробовать несколько других способов получения кодов продуктов. Я предпочитаю использовать VBScript - он быстрый и гибкий (но также может быть заблокирован на некоторых машинах, а написание сценариев всегда немного сложнее, чем использование инструментов).
wbemtest.exe
.wbemtest.exe
(удерживая клавишу Windows, нажмите R, отпустите клавишу Windows, введите "wbemtest.exe" и нажмите OK).SELECT IdentifyingNumber,Name,Version FROM Win32_Product
и нажмите "Use" (или эквивалент - инструмент будет локализован).WMIExplorer.exe
.SELECT IdentifyingNumber,Name,Version FROM Win32_Product
и нажмите Execute.msiinfo.csv
.Быстрое объяснение параметров:
Вы также можете включить (подробное) протоколирование и работать в тихом режиме, если хотите, что приводит нас к варианту 2: Вариант 2: Тихая деинсталляция с подробным протоколированием (лучше для пакетных файлов):
Быстрое объяснение параметров:
Здесь есть полный справочник по деинсталляции MSI (различные способы деинсталляции MSI-пакетов): https://stackoverflow.com/questions/450027/uninstalling-an-msi-file-from-the-command-line-without-using-msiexec/1055933#1055933. Существует множество различных способов деинсталляции. Если вы пишете пакетный файл, пожалуйста, посмотрите раздел 3 в вышеупомянутом ответе по ссылке для нескольких распространенных и стандартных вариантов командной строки деинсталляции. И краткая ссылка на msiexec.exe (параметры командной строки) (обзор командной строки для msiexec.exe из MSDN). А также версия Technet.
Получение других свойств / информации MSI (например, код обновления)
Вот похожая статья с несколькими дополнительными вариантами для получения информации MSI с помощью реестра или кэшированного msi: https://stackoverflow.com/questions/11251034/find-guid-from-msi-file?
Похожие темы (для справки и легкого доступа - я должен почистить этот список):
Если у вас слишком много установщиков, чтобы легко найти то, что вы ищете, вот powershell для создания фильтра и сужения списка по отображаемому имени.