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

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

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

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

1 ответ

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

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

Этот скрипт может помочь. Он использует API сценариев установщика Windows для перечисления всех установленных продуктов, показывая версию, sid пользователя, 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

Другие вопросы по тегам