Как узнать, какие продукты установлены - новый продукт уже установлен Windows MSI

Я могу создать MSI через WIX → мы установили его в IIS. Что происходит - у нас уже установлена ​​некоторая версия приложения, пусть скажем 1.8, тогда мы установили версию let say 99.0 только для целей тестирования, тогда мы удалили эту версию 99. Затем я попытался установить другую версию и получил: более новая версия продукта уже установлена.

Затем я попытался изменить код обновления продукта - и снова сделайте высокую версию, затем удалите и установите более низкую версию - и она отлично работает.

Итак, я чувствую, что что-то не хватает - дополнительная информация о том, что в списке программ и функций я не могу найти это более высокое приложение после удаления - тогда мой вопрос заключается в том, как установщик оценивает, что есть более новая версия? где именно информация о том, что установлено (и используется для сравнения), хранится и как эффективно и легко получить к ним доступ? так что я могу смотреть прямо на него?

Ответ 1

ProductCode определяет конкретный продукт. Он изменяется каждый раз, когда вы отправляете новый продукт замены. UpgradeCode определяет ряд продуктов, используя тот же UpgradeCode в обновленных продуктах, чьи версии, как ожидается, будут постоянно увеличиваться. По умолчанию новые версии продуктов заменяют более старые версии продуктов с крупным обновлением. Поскольку updateecode определяет серию продуктов, Windows будет искать продукты с одинаковым UpgradeCode, потому что идентичные UpgradeCodes означают взаимоисключающие продукты, используя их для замены старого продукта на новый. В WiX основное обновление выполняется с помощью элемента majorupgrade, который, по-видимому, вы используете, потому что вы получаете сообщение "более новая версия". Существует опция AllowDowngrade, если вы хотите "обновить" до более низкой версии.

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

Этот script может помочь. Он использует API сценариев Windows Installer для перечисления всех установленных продуктов, отображающих версию, пользовательский сид, ProductCode и т.д.:

Option Explicit
Public installer, fullmsg, comp, prod, a, fso, pname, ploc, pid,contxt, sid, psorce, pcache, pvers

Set fso = CreateObject("Scripting.FileSystemObject")
Set a = fso.CreateTextFile("prodex.txt", True)

' Connect to Windows Installer object
Set installer = CreateObject("WindowsInstaller.Installer")
a.writeline ("Products")
'on error resume next
For Each prod In installer.ProductsEx("", "", 7)
   pid = prod.ProductCode
   contxt = prod.Context
   sid=prod.usersid
   pname = prod.InstallProperty("ProductName")
   psorce = prod.InstallProperty("InstallSource")
   ploc =prod.InstallProperty("InstallLocation")  
   pcache = prod.InstallProperty("LocalPackage") 
   pvers=prod.InstallProperty("VersionString")
   a.writeline (pid & " " & pname & " " & pvers & " installed at <" & ploc & "> from " & psorce & " Context " & contxt & " Local " & pcache)
Next