Установщик Windows сделает это за вас, но только если ваш COM-компонент имеет одинаковый GUID для A и B, (и библиотеки DLL установлены в одном и том же месте обоими приложениями).
Установщик Windows работает путем подсчета ссылок каждого компонента (по всей системе).Компоненты идентифицируются по их GUID.
Если COM-компонент имеет тот же GUID, то происходит следующее:
- Установка A: Пересчет компонента идет от 0-> 1, установщик Windowsрегистрирует его
- Установка B: Пересчет компонента идет от 1-> 2, ничего не происходит
- Удаление A: Пересчет компонента идет от 2-> 1, ничего не происходит
- Удаление B: Компонент refcount идет от 1-> 0, установщик Windows отменяет его регистрацию
Если у него нет того же GUID, что происходит, это
- Установка A: КомпонентПересчет отсчета идет от 0-> 1, установщик Windows регистрирует его
- Установка B: Пересчет компонента B идет от 0-> 1, установщик Windows регистрирует его, перезаписывая записи реестра из компонента A.
- Деинсталляция A: Компонент A счет исходит от 1-> 0, установщик Windows отменяет его регистрацию, удаляя записи реестра.
- Похоже, что вы находитесь в этой ситуации - Деинсталляция B: Компонент BПересчет идетИсходя из 1-> 0, установщик Windows отменяет регистрацию, удаляя записи реестра (но они уже удалены)
Редактировать Поднято из комментариев:
Как и GUID, у каждого компонента также есть «Key Path».Если компонент содержит один или несколько файлов, вы должны указать, какой файл является «Ключом», используя KeyPath="foo.dll"
.Если компонент содержит одну или несколько записей реестра, он похож.
При проверке, установлено ли что-то, установщик Windows проверит GUID, прочитает путь к ключу, а затем проверит файл по пути к ключу (этокак он выясняет, что это за версии, помимо всего прочего), поэтому, если 2 компонента имеют одинаковый GUID, они должны также имеют одинаковый путь ключа, который должен разрешить к одному и тому жепоместить в файловую систему, когда продукт установлен.
Это довольно распространенный способ сказать, что оба установщика должны поместить общие файлы в одно и то же место.Что касается того, где их разместить, System32 НЕ является хорошим местом.
Я бы посоветовал где-нибудь в папке с общими файлами (обычно Program Files\Common Files\YourCompanyName
).Вы бы ввели это в Wix так: Directory="[CommonFilesFolder]\YourCompanyName"