Регистрация элемента управления COM во время установки - PullRequest
2 голосов
/ 28 мая 2010

Одно из наших приложений должно зарегистрировать элемент управления COM во время установки. Если более новая версия этого элемента управления уже зарегистрирована, мы не хотим перезаписывать ее более старой. Каковы условия установки Windows MSI, которыми я бы хотел управлять? Или есть какой-то другой метод «наилучшей практики», о котором я не знаю?

Спасибо

Ответы [ 2 ]

1 голос
/ 28 мая 2010

Похоже, ваша основная проблема в том, что у вас есть два элемента управления, которые поддерживают один и тот же класс CoClass, но живут по разным путям к файлам. Это не очень хорошая ситуация. Если это вообще возможно, должен быть только один возможный путь к файлу для двоичного файла, который реализует определенный класс COM.

Таким образом, правила контроля версий файлов гарантируют, что установщик MSI установит последний файл. По умолчанию MSI не перезаписывает более новые версии файлов более старыми.

Существуют приложения, в которых есть проблема, из-за которой клиенты должны время от времени использовать более старую версию класса, в то время как более новая версия установлена ​​и доступна. Одно из решений состоит в том, чтобы иметь служебное приложение, которое могут запускать клиенты, которое «укажет» записи реестра COM на правильный двоичный файл.

Определенно существуют проблемы с разрешениями при правильной реализации этого для неадминистративных учетных записей, и вам следует избегать попадания в такую ​​ситуацию, если это вообще возможно.

Если вам абсолютно необходимо иметь несколько двоичных файлов, реализующих один и тот же GUID COM CoClass, и если не слишком поздно менять старые клиенты, вы можете создать мастер-класс «фабрика», который будет принимать любые данные / информацию, доступные от клиента, и выбирать правильная реализация для возврата. Это будет просто класс COM с интерфейсом, в котором есть методы, которые возвращают указатели интерфейса на фактический интерфейс, необходимый клиентам после выделения соответствующего класса реализации и интерфейса запросов для интерфейса клиента.

1012 * редактировать * Вы можете изменить местоположение вашего приложения с версии на версию (например, «c: \ program files \ My App V2». Это нормально, если вы используете атрибуты кода и версии # и т. Д. Атрибутов ваших пакетов для MSI). заставить MSI удалить все существующие версии вашего приложения перед установкой новых.

0 голосов
/ 04 июня 2010

Здесь вам не хватает модулей слияния. По сути, вы создаете модуль слияния для вашего компонента COMxx. Это перекомпилируется с каждой новой версией 19, 20, 21, ... вашего компонента (но сохраняет его GUID). Оба ваших приложения "ссылаются" на этот модуль слияния COMxx и отправляют его содержимое пользователю.

Таким образом установщик Windows будет гарантировать, что ваша dll пересчитана и обновлена ​​только при необходимости, при условии, что вы сохраняете (увеличиваете) информацию о версии в dll.

Редактировать: модуль слияния также жестко кодирует путь установки, который обычно заканчивается где-то в C:\Program Files\Common Files\{My Company}\{My Component}, оба приложения отправляют его туда.

...