Проблема с автоматической установкой Powershell

Что произойдет, если мы попытаемся установить программное обеспечение с помощью PowerShell, которое уже установлено на сервере. Например, у меня уже есть блокнот++ на моем сервере. Теперь я пытаюсь установить ту же версию блокнота++ на свой сервер с помощью powershell. Тогда что будет на выходе? Кроме того, есть ли способ узнать, установлено ли программное обеспечение на сервере или нет.


person Ram Ramesh    schedule 20.10.2020    source источник
comment
Что произойдет, зависит от используемого типа установщика: устаревший setup.exe, файл установщика MSI или любой другой тип установщика, который вы используете. Разные механизмы приводят к совершенно разным поступкам. Устаревший setup.exe, скорее всего, просто установится поверх или параллельно, за исключением встроенных механизмов для идентификации существующих установок. MSI имеет встроенные функции для обнаружения существующих установок и будет знать, является ли существующая установка той же версией или связана по версии. Другие технологии имеют другие механизмы.   -  person Stein Åsmul    schedule 20.10.2020


Ответы (1)


Есть много видов инсталляторов, но большинство добавляют записи в список Add/Remove программ, но гарантий нет. Вот код C++ для сканирования реестра и проверки через WMI. Вы можете использовать сценарии вместо этого, но это не точная наука, чтобы найти то, что установлено - некоторые установщики очень пользовательские и нестандартные и следуют нескольким рекомендациям.

Записи реестра:

  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Удалить
  • HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Удалить

Пакеты MSI:

Для пакетов MSI есть способы проверить, установлена ​​ли точно такая же версия или связанная версия. Если у вас есть код продукта MSI, вы можете просто проверить, установлен ли он следующим образом:

Dim installer : Set installer = CreateObject("WindowsInstaller.Installer")
MsgBox installer.ProductState("{00000000-0000-0000-0000-000000000001}") ' <= PRODUCT CODE

Здесь ссылка на более длинный пример.

Вы можете найти код продукта для установленного MSI, используя несколько подходов: Как найти GUID продукта установленной установки MSI?

Если у вас есть код обновления для семейства MSI, вы можете использовать метод RelatedProducts, чтобы узнать, установлен ли связанный продукт:

Set installer = CreateObject("WindowsInstaller.Installer")
Set upgrades = installer.RelatedProducts("{UPGRADE-CODE-GUID-HERE}")

For Each u In upgrades
   MsgBox u, vbOKOnly, "Product Code: "
Next

Как я могу найти код обновления для установленного файла MSI?. Вы можете получить код обновления для MSI, который должен быть установлен, просмотрев таблицу свойств с помощью Orca.

Прагматические подходы:

Одним из вариантов является идентификация файла ключа из каждой установки и проверка его существования с помощью любого языка, который вы хотите — скрипты подойдут.

Set fso = CreateObject("Scripting.FileSystemObject")
MsgBox fso.GetFileVersion("C:\Windows\System32\vcruntime140.dll")

Приведенный выше фрагмент сценария из этого разглагольствовать о том, как найти установленную версию VCRedist.


Ссылка:

person Stein Åsmul    schedule 20.10.2020