2016-02-12 7 views
1

У меня есть приложение Windows, которое должно запускаться с USB и не разрешено устанавливать какое-либо программное обеспечение на локальный ПК. Приложение использует MSXML версии 4 и, следовательно, требует msxml4.dll.Для портативного приложения требуется не переносная dll

В коде используется приложение Windows COM для создания экземпляра (CreateInstance/CoCreateInstance) объектов документа XML/элемента, а COM (как-то волшебным образом) загружает требуемую DLL для меня во время выполнения. Насколько я понимаю, COM требует, чтобы DLL регистрировалась с помощью инструмента regsvr32, чтобы найти его и успешно загрузить. Проблема в том, что мне не разрешено запускать инструмент regsvr32, и я также не хочу этого делать, поскольку он изменит системный реестр (я думаю).

Но что делать, если мне не разрешено регистрировать DLL в системе, есть ли способ сообщить COM, что есть dll, который он должен использовать только временно? Я знаю о DLL redirection, но это работает только в том случае, если dll была зарегистрирована ранее.

+0

MSXML 4 еще не установлен в целевой системе? – Niall

+1

Нет, MSXML 6 есть. Это хорошо и всегда нужно использовать для выполнения работы. Нет необходимости в бесплатном манифесте. –

ответ

0

Что вы думаете о COM правильно, оно использует информацию реестра (с индексом GUID) для загрузки DLL и создания экземпляра для вас. Я не думаю, что вы можете обойти COM без регистрации DLL. вы должны попытаться использовать другую DLL без COM для обработки XML в своем приложении.

Если моя память обслуживает меня правильно, COM-библиотека скроет весь символ вашего экземпляра, то есть вы не сможете загрузить его динамически.

+0

[link in Related] (http://stackoverflow.com/questions/2187425/how-do-i-use-a-com-dll-with-loadlibrary-in-c?rq=1) может быть ссылкой для тебя. – gzh