Переопределить использование зарегистрированной сборки COM - PullRequest
1 голос
/ 02 декабря 2010

У меня есть старое приложение VB6, которое я перемещаю в VB.Net, у меня также есть COM-сборка, на которую ссылается приложение.

Я хочу иметь возможность запускать оба приложения (староеодин и .net один) бок о бок, проблема в том, что я сделал пару изменений в сигнатуре COM-сборки, чтобы она работала в приложении .Net (и эти изменения не совместимы со старым приложением).

Если я сначала устанавливаю старое приложение, оно регистрирует dll и копирует его в System32, когда я устанавливаю новое приложение, оно копирует новую сборку COM в свою папку приложения (в программных файлах), но когда явыполнить его, он пытается загрузить старую сборку (зарегистрированную старым приложением).

Есть ли способ заставить новое приложение использовать сборку, которая находится в его собственной папке?и, таким образом, сохраняйте старое приложение, используя старое (зарегистрированное на system32).

Надеюсь, я дал понять.

Большое спасибо за вашу помощь.

Ответы [ 2 ]

3 голосов
/ 02 декабря 2010

Не можете ли вы дать своим старым и новым COM-объектам различные GUID (CLSID), имена интерфейсов, имена библиотек типов и имена классов (и все, что я забыл:))?

т.е. в новой версиипереименуйте все, чтобы оно не регистрировалось поверх старой версии, а вместо этого - отдельный набор объектов, интерфейсов и т. д.

Новый код может затем использовать новые объекты и обновленные интерфейсы, в то время как старыйКод все еще может использовать старые объекты и оригинальные интерфейсы.

2 голосов
/ 02 декабря 2010

Звук, чтобы вы забыли зарегистрировать COM-сервер.Но это убило бы старое приложение.Сложным требованием в COM является то, что вы изменяете Guides классов и интерфейсов, когда вносите в них критические изменения.Это гарантирует, что разные версии могут жить бок о бок и не топать записи реестра друг друга.

Другой способ - не требующий регистрации COM-манифест.Хотя обычно не очень весело собирать манифест и устранять проблемы.

Действительно, действительно дешевый трюк состоит в том, чтобы поместить библиотеку DLL COM-сервера в тот же каталог, что иклиент EXE.И создайте пустой файл с расширением .local.Если основной EXE-файл называется mumble.exe, то файл должен называться mumble.exe.local.Этого достаточно для распознавателя COM, чтобы всегда использовать локальную DLL, а не путь, записанный в реестре.Это задокументировано здесь .

...