Генерируйте файлы манифеста для COM без регистрации

84
задан GSerg 20 March 2013 в 10:39
поделиться

3 ответа

Похоже, что идеальное решение еще не существует. Суммировать некоторое исследование:

Делают Мою Декларацию ( ссылка )

, Этот инструмент сканирует проект VB6 искать зависимости COM, но это также поддерживает ручное объявление последних ограниченных зависимостей COM (т.е. используемые через CreateObject).

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

Похож на очень хороший инструмент, но с версии 0.6.6 он имеет следующие ограничения:

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

я не протестировал, поддерживает ли это.NET com библиотеки.

regsvr42 ( ссылка codeproject )

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

Эта утилита не поддерживает библиотеки COM.NET, так как они не выставляют стандартную программу DllRegisterServer.

утилита записана в C++. Исходный код доступен.

mt.exe

Часть окон SDK (может быть загружен от MSDN), который Вы уже имеете, если Вам установили Visual Studio. Это зарегистрировано здесь . Можно генерировать файлы манифеста для собственных библиотек COM с ним как это:

mt.exe -tlb:mycomlib.ocx -dll:mycomlib.ocx -out:mycomlib.ocx.manifest

можно генерировать файлы манифеста для библиотек COM.NET с ним как это:

mt.exe -managedassemblyname:netlib.dll -nodependency -out:netlib.dll.manifest

Однако существуют некоторые проблемы с этим инструментом:

  • первый отрывок не генерирует атрибуты проценуроза, повреждая клиенты, которые используют CreateObject с проценурозами.
  • второй отрывок генерирует <runtime> и <mvid> элементы, которые должны быть разделены, прежде чем декларации на самом деле работают.
  • Поколение клиентских деклараций для приложений не поддерживается.

, Возможно, будущие выпуски SDK улучшат этот инструмент, я протестировал тот в Windows SDK 6.0a (перспектива).

60
ответ дан Wim Coenen 24 November 2019 в 08:38
поделиться

Сделать мою декларацию (MMM) является хорошим инструментом для того, чтобы сделать это. Также возможно записать сценарий для обработки всех файлов DLL/OCX с помощью mt.exe , чтобы генерировать декларацию для каждого и затем объединить их всех вместе. MMM обычно лучше/легче, потому что он также обрабатывает много специальных/странных случаев.

9
ответ дан jdve 24 November 2019 в 08:38
поделиться

Вы можете использовать выделение Unattended Make My Manifest для генерации манифестов непосредственно в автоматизированных сборках. Он использует файл сценария для добавления зависимых компонентов COM. Это отрывок из примера ini с доступными командами:

# Unattended MMM script
#
# Command names are case-insensitive. Reference of supported commands:
#
# Command: Identity
#
#   Appends assemblyIdentity and description tags.
#
#   Parameters       <exe_file> [name] [description]
#      exe_file      file name can be quoted if containing spaces. The containing folder 
#                    of the executable sets base path for relative file names
#      name          (optional) assembly name. Defaults to MyAssembly
#      description   (optional) description of assembly
#
# Command: Dependency
#
#   Appends dependency tag for referencing dependent assemblies like Common Controls 6.0, 
#     VC run-time or MFC
#
#   Parameters       {<lib_name>|<assembly_file>} [version] [/update]
#     lib_name       one of { comctl, vc90crt, vc90mfc }
#     assembly_file  file name of .NET DLL exporting COM classes
#     version        (optional) required assembly version. Multiple version of vc90crt can
#                    be required by a single manifest
#     /update        (optional) updates assembly_file assembly manifest. Spawns mt.exe
#
# Command: File
#
#   Appends file tag and collects information about coclasses and interfaces exposed by 
#     the referenced COM component typelib.
#
#   Parameters       <file_name> [interfaces]
#     file_name      file containing typelib. Can be relative to base path
#     interfaces     (optional) pipe (|) separated interfaces with or w/o leading 
#                    underscore
#
# Command: Interface
#
#   Appends comInterfaceExternalProxyStub tag for inter-thread marshaling of interfaces
#
#   Parameters       <file_name> <interfaces>
#     file_name      file containing typelib. Can be relative to base path
#     interfaces     pipe (|) separated interfaces with or w/o leading underscore
#
# Command: TrustInfo
#
#   Appends trustInfo tag for UAC user-rights elevation on Vista and above
#
#   Parameters       [level] [uiaccess]
#     level          (optional) one of { 1, 2, 3 } corresponding to { asInvoker, 
#                    highestAvailable, requireAdministrator }. Default is 1
#     uiaccess       (optional) true/false or 0/1. Allows application to gain access to 
#                    the protected system UI. Default is 0
#
# Command: DpiAware
#
#   Appends dpiAware tag for custom DPI aware applications
#
#   Parameters       [on_off]
#     on_off         (optional) true/false or 0/1. Default is 0
#
# Command: SupportedOS
#
#   Appends supportedOS tag
#
#   Parameters       <os_type>
#     os_type        one of { vista, win7 }. Multiple OSes can be supported by a single 
#                    manifest
#

Он будет работать в 32- или 64-битной Windows.

7
ответ дан 24 November 2019 в 08:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: