Проблема порядка загрузки Rundll32 - PullRequest
1 голос
/ 10 сентября 2009

Мой продукт состоит из двух dll (A.dll и B.dll для ясности), A.dll зависит от B.dll. Обе библиотеки A и B находятся в одной папке (скажем, c: \ app). В то же время старая версия B.dll находится в папке Windows \ System32. Когда я пытаюсь запустить следующую команду из командной строки (текущая папка c: \ app):

<code>rundll32.exe "c:\app\A.dll",DoWork

Я получаю сообщение об ошибке, потому что rundll32 использует старую версию B.dll из папки System32. Я пытался использовать API SetDllDirectory из функции DllMain библиотеки A.dll, чтобы добавить папку c: \ app в путь поиска, но у меня это не работает. Я не могу найти полезную и полную информацию о внутренностях rundll32 или какую-либо информацию о порядке загрузки dll.
Возможно ли успешно выполнить rundll32 в этой конфигурации развертывания? (Я имею в виду загрузить новую версию B.dll из папки c: \ app).

Ответы [ 2 ]

0 голосов
/ 10 сентября 2009

DLL Hell на SO

Ну, это круто в стиле ретро. Вот мысль: попробуйте скопировать rundll32.exe в ту же папку, что и новые библиотеки DLL и ваш продукт, и запустите его оттуда. Это может сработать ...

0 голосов
/ 10 сентября 2009

Я бы избавился от старой библиотеки DLL или использовал бы другое имя для новой библиотеки DLL. Наличие двух версий чего-то, что должно делать то же самое, и присвоение ему одного и того же имени, может вызвать хаос.

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