Проект установки Visual Studio (vdproj) - STDOLE, как правильно зарегистрировать COM DLL? - PullRequest
1 голос
/ 26 марта 2019

Я использую проект установки Visual Studio 2015.

У меня есть COM DLL-библиотека в настройке, которая имеет ссылку на STDOLE (библиотека системных типов, {00020430-0000-0000-C000-000000000046}, котораяне должен быть зарегистрирован, насколько я понимаю, потому что это защищенный файл / регистрация).Если вы попытаетесь зарегистрировать его, вы получите сообщение об ошибке (предупреждение) при установке MSI.

Тем не менее, расширение vdproj добавляет регистрацию для этой библиотеки DLL в таблицу MSI "TypeLib".Кажется, что он делает это не всегда, но при некоторых условиях я не могу сделать вывод.У меня нет возможности исключить, что tlb, он каким-то образом продолжает появляться (возможно, из зависимостей?)

  1. Почему vdproj пытается зарегистрировать ту DLL, которая не должна быть зарегистрирована?
  2. Какчтобы избежать этого?Я попытался добавить ручное последующее редактирование созданного MSI со скриптом, чтобы удалить этот tlb, и это сработало;однако, кажется, что это совершенно неуместный подход к проблеме.

Для этого конкретного проекта я застрял с установщиком Visual Studio и не могу переключиться на более разумные и прозрачные альтернативы (такие как WiX).,Любая помощь или совет высоко ценится!

1 Ответ

1 голос
/ 26 марта 2019

VB6 Runtime : раздел реестра: Typelib\{000204EF-0000-0000-C000-000000000046} является частью Visual Basic 6 Runtime и является известной проблемойв WiX heat.exe извлечение данных COM ошибочно приводит к этому ключу реестра для каждого компонента ActiveX или COM. Обратите внимание, что это не ошибка WiX, а общая проблема с VB6 .Отсюда и проблема, которую вы видите в проектах установки Visual Studio.

Из справочного руководства WiX (для heat.exe) (многоцелевой инструмент, одним из которых является извлечение регистрации COM): " ... При регистрации компонента COM, созданного в VB6, он добавляет записи реестра, которые являются частью компонента среды выполнения VB6. Этот флаг рекомендуется для компонентов VB6, чтобы избежать взлома VB6время выполнения при удалении. Исключаются следующие значения: CLSID\{D5DE8D20-5BB8-11D1-A1E3-00A0C90F2731}, Typelib\{EA544A21-C82D-11D1-A3E4-00A0C90AEA82}, Typelib\{000204EF-0000-0000-C000-000000000046}, любые интерфейсы, которые ссылаются на эти две библиотеки типов`"

Разрешение : А теперь самая сложная часть, каково же решение?Честно говоря, сейчас у меня нет времени на тестирование, но я полагаю, что вы можете просто открыть финальный MSI с помощью Orca и удалить эти записи - если они будут там.Я думаю, это именно то, что вы делаете сейчас, так что вы вернулись к исходной точке, но, по крайней мере, есть некоторая ясность относительно того, что вызывает проблему.I suppose you can try to run the build when the VB6 component is unregistered as opposed to when it is registered? Какой смысл в том, что он извлекает ключи только в том случае, если компонент не зарегистрирован при сборке?If this is the case, maybe try to self-register your VB6 component prior to the setup build.


RegSpy.exe : Вы можете использовать инструмент под названием RegSpy (или RegSpy2 на самом деле), чтобы извлечь регистрацию COM из файла COM.Вы можете найти exe-файл в папке «Release», затем перейдите:

regspy.exe richtx32.ocx >> richtx32.reg

Затем вы можете импортировать reg-файл в ваш проект установщика Visual Studio.Не забудьте заменить жестко закодированные пути свойствами каталога MSI и удалить ошибочные записи VB6, упомянутые выше.

VSProj : в Visual Studio Right click Visual Studio Installer Project => View => Registry => Right Click Top Node => Import...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...