Регистрация Бесплатно (Regfree) COM - PullRequest
3 голосов
/ 06 марта 2009

Мы используем модель автоматизации COM Object, чтобы сделать наше приложение доступным для наших клиентов.

Они по большей части используют python для доступа к нашему интерфейсу приложения.

Поскольку мы хотим иметь возможность устанавливать (еще не запущенные, это еще одна проблема) разные версии приложения, мы изменяем наши COM-компоненты на regfree.

Но это противоречит доступу из языков сценариев через автоматизацию IDispatch, поскольку им нужны записи в реестре.

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

Каковы альтернативы нашему подходу?

Ответы [ 3 ]

3 голосов
/ 09 марта 2009

В COM есть протокол для этого. Если вы создаете версии интерфейсов (и меняете GUIDS для каждой версии), вы можете установить несколько версий. Microsoft делает это с помощью WORD и т. Д.

Можно создать класс Word.Document.5, специфичный для версии 5 библиотеки, или просто Word.Document, который создаст экземпляр самого высокого подарка на машине. Я не уверен, встроена ли эта функциональность в COM или ее нужно усовершенствовать, но стоит посмотреть.

3 голосов
/ 19 апреля 2009

Regfree COM-объекты могут быть доступны через объект Microsoft.Windows.ActCtx .

Что касается автоматизации IDispatch, требующей записи в реестре - это не совсем правильно. Я предполагаю, что вы используете стандартную реализацию ATL, IDispatchImpl. Мы решили это решение, предоставив собственную реализацию IRegFreeDispatchImpl, в которой использовались API-интерфейсы манипуляции активацией способом, предложенным здесь , чтобы обернуть все точки входа в DLL с помощью активации контекста активации / дезактивация.

1 голос
/ 06 марта 2009

Ну, ответ на этот вопрос вы сами. Вы можете написать приложение, которое имеет полный список всех версий компонентов COM. Как только версия выбрана пользователем, вы можете вызвать приложение regsvr32, чтобы зарегистрировать эту конкретную версию.

...