Я пытаюсь настроить регистрацию бесплатного COM, но имею небольшую проблему в том, что другой COM-объект может быть клиентом.
App.exe ----- > DLL сервера COM/клиент (зарегистрированный или нет) -------- > COM-сервер DLL (НЕ зарегистрирован)
Мои вопросы: возможно ли создать манифест для второй dll (COM-сервер/клиентская dll)? Я не контролирую исполняемый файл, но если это так, это работает, если я создаю манифест клиента для исполняемого файла и манифест сервера для DLL сервера COM.
это файл манифеста для средней dll. Я попытался внедрить его и попробовал внешний. Все еще не работает.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32"
name="COMCliSer.dll"
version="1.0.0.0"
/>
<dependency>
<dependentAssembly>
<assemblyIdentity
name="COMSer.dll"
version="1.0.0.0"
/>
</dependentAssembly>
</dependency>
</assembly>
В ходе дальнейшего расследования я могу заставить все это работать, пока средняя dll также является бесплатной регистрацией, а exe имеет манифест приложения. Как только я зарегистрирую среднюю dll и отменим манифест приложения (у меня нет контроля над тем, что exe будет использовать мою dll), все это перестает работать.
Если exe не имеет манифеста, тогда манифест dll не принимается во внимание. Я могу это доказать, настроив все на работу. Затем допустим ошибку в манифесте сборки. Появится обычное сообщение:
Невозможно создать процесс: это приложение не запускалось, потому что неправильная конфигурация приложения. Повторная установка приложения может устранить эту проблему.
Если я затем отброшу манифест приложения, приложение загрузится (хотя CoCreateInstance завершится неудачно, потому что зависимости не принимаются во внимание)