Мы разрабатываем решение для установки MSI (к сожалению, на основе VDPROJ), которое установит экземпляр нашего серверного приложения. Программа установки была разработана для поддержки концепции установки нескольких экземпляров. Это означает, что мы написали небольшую утилиту, которая берет MSI-заглушку, а затем выводит сконфигурированный MSI с уникальным кодом продукта, названием продукта и т. Д. Среди прочего. Код продукта обновляется как в таблице свойств, так и в потоке сводной информации.
На этапе установки все работает нормально. Наши два тестовых экземпляра, AcmeCorp и ZurgCorp, установлены бок о бок просто отлично. Все их службы Windows зарегистрированы и работают должным образом.
Однако мы столкнулись с очень странной проблемой при удалении одного из этих экземпляров. Не имеет значения, какой экземпляр мы удаляем первым. Но какой бы из них мы ни выбрали, деинсталляция будет продолжаться очень быстро, но настолько быстро, что фактически пропускается вызов нашего подкласса .NET Installer (с тегом RunInstaller и вызовом CustomAction).
Удаление будет «успешным», а MSI будет удален из списка «Установка и удаление программ». Но служба Windows остается позади, потому что программа удаления MSI никогда не запускает нашу сборку, чтобы удалить ее!
Теперь, если мы пойдем дальше и удалим второй экземпляр, он будет отлично удален, включая службу Windows.
Так что же здесь происходит?
Мне пахнет какой-то формой подсчета ссылок. Но где? Мы следовали этой книге, чтобы удостовериться, что Код продукта отличается. Может быть, мы что-то упустили из-за Идентификатора компонента?
Спасибо.