CreateProcess против командной строки и отсутствующая DLL - PullRequest
1 голос
/ 07 февраля 2012

Когда я использую CreateProcess для запуска приложения (InDesign), которое загружает мой плагин, мой плагин не загружается, потому что DLL, которую использует мой плагин, не может быть загружен. Странно то, что если я дважды щелкну по приложению или открою его из командной строки, мой плагин загрузится нормально.

Мое приложение, которое вызывает CreateProcess, довольно большое и само использует несколько библиотек DLL, некоторые из которых также используются моим плагином. Я сузил его до DLL, которая не будет загружаться. Я установил задержку загрузки, плагин теперь загружается, но не загружает эту DLL при вызове.

Я использовал «Process Explorer», чтобы проверить PATH приложения, чтобы убедиться, что он такой же, как когда я открываю его из командной строки. Путь к DLL проблемы находится в окружении PATH, то же самое относится и к другим DLL, которые нормально загружаются.

Я запускаю много разных приложений с моими плагинами и без них и никогда раньше не видел ничего подобного.

Кто-нибудь знает, что может происходить?

Упс ...

Ну, я ошибался насчет env PATH, он отличался в зависимости от того, как было запущено приложение (InDesign). Похоже, QuickTime изменяет путь для моего приложения, помещая его папку «Apple Application Support» вверху. Внутри этой папки находится DLL с тем же именем, что и используемая мной, а именно libxml2.dll. Когда я загружаю libxml2.dll в свой плагин с помощью LoadLibrary, msvcr80.dll не может быть найден. Шиш.

Извините за отвлечение ...

1 Ответ

0 голосов
/ 07 февраля 2012

Проверьте рабочий путь при загрузке приложения и / или плагина. Проводник и командная строка обычно устанавливают это явно, но другое приложение, вызывающее CreateProcess(), может этого не делать.

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