Регистрация и использование компонента ActiveX / COM, созданного с помощью IDL с UUID, созданными во время выполнения - PullRequest
1 голос
/ 20 июня 2011

У меня есть существующий компонент ActiveX / COM, который работает хорошо в течение некоторого времени.Этот компонент ActiveX изначально был разработан для использования одним клиентским приложением на машину.Однако теперь необходимо расширить этот компонент ActiveX для использования более чем одним клиентским приложением на одном ПК.

Я знаю, что причина использования COM - это возможность повторного использования и чтоЕсть способы управления этим, такие как подсчет ссылок и т. д. Однако моя проблема в другом.Пожалуйста, читайте дальше ...

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

Ниже приведены действия, которые в основном происходят.Шаг 4 ниже является актуальной проблемой:

  1. При первой установке клиентского приложения X, поскольку оно использует COM, установщик регистрирует компонент COM, и это создает запись "typelib"запись в реестре с UUID, как определено в IDL и .rgs.

  2. Если я устанавливаю другое клиентское приложение Y, то перед удалением клиентского приложения X установщик Y обновляет значение win32 "typelib", указав путь к компоненту ActiveX.в текущем каталоге Y.

  3. Когда я удаляю клиентское приложение X, он удаляет эту запись typelib из реестра.

  4. Так что на этом этапе, если я пытаюсь удалить приложениеДа, это не удается, потому что отсутствует запись typelib.Программа удаления X уже удалила эту запись.

Чтобы решить эту проблему, я пытаюсь обойти использование библиотек типов или использовать альтернативные способы (если это возможно) для использования компонента ActiveX без проблемы, которую яЯ сталкиваюсь с этим сейчас.

Проблема сводится к тому, чтобы иметь разные записи библиотеки типов для разных клиентских приложений, но для одного и того же компонента ActiveX.

Может кто-нибудь направить меня и предложить хороший,элегантное решение?

1 Ответ

0 голосов
/ 21 июня 2011

Я решил эту проблему, создав IDL, изменив файл rgs.

...