Мы используем InstallShield для создания установщиков для ряда очень похожих продуктов, каждый из которых имеет общие файлы, которые хранятся в фиксированных каталогах под нашим каталогом поставщиков. У нас есть проблема с адской библиотекой DLL, которую, как я думал, установщики должны решить.
Представьте, что продукты A и B оба имеют файл FOO, установленный в каталоге D. FOO не обязательно является DLL; это может быть любой файл.
В идеальном мире обе копии FOO идентичны, и когда оба продукта установлены, FOO получает (перезаписывает) в D, и все в порядке. И вот как это работает, когда все одинаково.
На практике A и B могут быть из разных поколений, поэтому на самом деле A имеет вариант FOO A (FOO_a), а B имеет вариант FOO_b. Теперь только один из FOO_a или FOO_b окажется в D, если оба продукта установлены, и, следовательно, один из A или B будет сбит с толку из-за неправильного файла.
Что бы я ожидал от установщиков (и InstallShield), так это то, что для каждого продукта P, установленного в системе, счетчик ссылок будет где-то храниться (реестр?) Для каждого установленного файла. Таким образом, когда A установлен и FOO (_a) размещен, FOO помечается как принадлежащий A, и счетчик ссылок установлен в 1. Если B теперь установлен с FOO_b, идентичным FOO_a, FOO должен быть помечен как принадлежащий также B и счетчик ссылок увеличивается. Если B установлен, а FOO_b отличается от FOO_a, я ожидаю, что установщик пожалуется, что несовместимые файлы FOO были предложены для установки, и установка должна быть прервана. Когда продукт будет деинсталлирован, я ожидаю, что счетчики ссылок для каждого установленного файла будут уменьшены, а установленный файл будет удален только тогда, когда счетчик ссылок станет равным нулю.
Это не то, что делает InstallShield. Он просто врезает FOO в целевой каталог во время установки. По сути, это то же самое, что и DLL-ад. Это предполагаемое поведение установщиков? InstallShield? Windows?
Мы думали, что ищем способ попросить InstallShield справиться с этим, но ничего не нашли. Я был бы рад, если бы кто-то сказал, где искать, чтобы настроить это правильно. Или InstallShield не может / не будет этого делать? [Если так, почему я даю им деньги?]