Могу ли я использовать манифесты для указания необязательной зависимости от COM-сервера? - PullRequest
2 голосов
/ 24 мая 2010

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

Потребительское приложение будет работать нормально без COM-сервера - только около 1,7% его функций использует COM-сервер. Таким образом, со старым regsvr32 он будет запускаться и работать нормально, пока пользователь не сделает что-то, что вызовет вызов CoCreateInstance(), и в этот момент потребитель получит сообщение об ошибке.

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

Я добавил «дополнительный манифест» со следующим содержанием:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
   <dependency>
       <dependentAssembly>
           <assemblyIdentity
              type="win32"
              name="TheComServer.X"
              version="1.0.0.0"/>
       </dependentAssembly>
   </dependency>
</assembly>

Есть ли способ использовать reg-free COM с манифестами и сделать зависимость необязательной - чтобы потребительская программа запускалась и работала нормально до тех пор, пока CoCreateInstance() фактически не будет вызван?

1 Ответ

2 голосов
/ 24 мая 2010

Вы должны будете предоставить хотя бы манифест для безрегулярных сборок COM.

Манифест приложения ссылается на сборки, которые нужны приложению - манифесты компонента обрабатываются при запуске приложения - и указывают com-объекты, которые экспортирует сборка.

Они имеют , которые должны быть указаны при загрузке контекста активации.

Вы можете использовать API контекста активации, чтобы вручную создать контекст активации и загрузить в него сборки, а затем убедиться, что этот контекст актуален при попытке CoCreateInstance.

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