Я относительно плохо знаком с WiX. Это - большой инструмент, но мне все еще требуется некоторое время для изучения этого лучше. Я встретился с проблемой с регистрацией и нерегистрацией COM-компонента. Я создал установщики для двух приложений, позволяет, называют их A и B. Оба используют тот же COM-компонент. Я использовал инструмент тепла, как рекомендуется. При установке A или B, компонент регистрируется без любых проблем.
Но когда я устанавливаю A и B, затем удаляю (с, Добавляют/Удаляют программы), COM-класс становится незарегистрированным, и B не может больше использовать его. Существует ли чистое решение предотвратить это? Я хотел бы не зарегистрировать COM, когда И A и B удаляются.
Любая справка ценилась бы,
С наилучшими пожеланиями, madbadger
Править: Спасибо за Ваши ответы. Я установил GUID на то же значение в обоих установщиках, и теперь ключи реестра удаляются правильно, это - когда последняя программа удалена из системы.
Hovewer, проблема сохраняется по одной причине. Я проверил реестр под HKEY_CLASSES_ROOT/CLSID / [соответствующий GUID COM]. Это - то, что происходит:
- Я устанавливаю A, и путь к COM установлен к [путь к A/component.dll]
- Я устанавливаю B, и путь к COM установлен к [путь к B/component.dll]
- Я удаляю B, и путь к COM остается [путем к B/component.dll]
- Теперь A не может получить доступ к COM-компоненту althrough, он регистрируется, потому что [путь к B/component.dll] больше не существует
Теперь я предполагаю, что обязательно поместить COM-компонент в тот же каталог для обоих приложений. Windows Installer не может вернуться к старому пути или это что-то, что я пропускаю?
Установщик Windows сделает это за вас, но только если ваш COM-компонент имеет одинаковый GUID в A и B, (и библиотеки DLL устанавливаются в одном месте обоими приложениями).
Windows Установщик работает путем подсчета ссылок на каждый компонент (во всей системе). Компоненты идентифицируются по их GUID.
Если у COM-компонента такой же GUID, происходит следующее:
Если он не имеет того же GUID, вот что происходит
Edit Повышено из комментариев:
Помимо GUID, каждый компонент также имеет «Key Path». Если компонент содержит один или несколько файлов, вы должны указать, какой файл является файлом ключа, используя KeyPath = "foo.dll"
. Если компонент содержит одну или несколько записей реестра, он аналогичен.
При проверке, установлено ли что-то, установщик Windows проверит GUID, прочитает путь к ключу, затем проверит файл по пути ключа (среди прочего, так он определяет, какая версия установлена), поэтому, если 2 компонента имеют одинаковый GUID, они должны также иметь одинаковый путь к ключу, который должен указывать на одно и то же место в файловой системе при установке продукта.
Это длинный способ сказать, что оба установщика должны поместить общие файлы в одно и то же место. Что касается того, где их разместить, System32 - НЕ хорошее место.
Я бы предложил где-нибудь в папке с общими файлами (обычно Program Files \ Common Files \ YourCompanyName
). Вы должны ввести это в Wix так: Directory = "[CommonFilesFolder] \ YourCompanyName"
Используете ли вы в теге компонента один и тот же идентификатор Guid в каждом установщике?
Вы должны заключить этот общий компонент в модуль слияния и ссылаться на него из обоих приложений.
Это автоматически позволит общему счету ссылок DLL выполнять свою работу при удалении.