На данный момент наша сборка автоматически обновляет номер версии в файле проекта развертывания (VS2008) и изменяет ProductCode и PackageCode.
Мы вообще не используем большую функциональность MSI, это скорее метод упаковки и способ запуска пользовательских действий, которые выполняют определенные действия в зависимости от файла определения, который поставляется как контент в MSI.
Таким образом, с точки зрения возможностей MSI все наши сборки выглядят одинаково, они будут просто извлекать более новые версии выходных данных других проектов, а не какие-либо изменения в проекте развертывания, и поэтому мы не меняем структуру MSI вообще.
Итак, могу ли я оставить код продукта стабильным?
Причина, по которой я хотел бы сделать это, заключается в том, что я удалял код продукта, пока не обнаружил, что это глупый способ, учитывая, что наша сборка постоянно их меняет!
Или, есть ли способ, которым мы можем удалить, используя UpgradeCode, который никогда не изменяется?
FEEDBACK:
Я еще немного покопался в этом и изменил способ удаления из системы развертывания в нашей значительной тестовой среде. Вместо того, чтобы извлечь ProductCode из MSI и использовать его в команде MSI / X, я теперь извлекаю UpgradeCode из MSI. В рамках удаления я поставляю и удаленно выполняю (через PSEXEC) небольшой скрипт vbs, который находит соответствующие продукты по
set oWI = CreateObject("WindowsInstaller.Installer")
set related - oWI.RelatedProducts(wscript.arguments(0))
if related.Count == 1 then
uninstallString = "msiexec /X " & related.Item(0) & " /qn"
set oShell = CreateObject("WScript.Shell")
oShell.Run uninstallString, 1, True
end if
хорошо, возможно, не лучшие в мире VBS - но это работает, передавая UpgradeCode в качестве первого параметра в сценарий. Есть еще несколько строк для ведения журнала и т. Д., Чтобы мы могли рассказать, что произошло в журнале аудита.
Немного длиннее, чем просто вызов msiexec напрямую через psexec, но я уже доставлял msi и файл настроек, так что отправка небольшого скрипта на самом деле не проблема.
Это может помочь кому-то еще - кто знает.