2011-11-22 5 views
1

Я пытаюсь использовать CreateProcess для выполнения внешнего процесса из приложения C++.CreateProcess игнорирует рабочий каталог lpCurrentDirectory/parent

Запущенное приложение выходит из строя при поиске dll, которые существуют в его каталоге.

Проверка процесса выполнения с помощью Process Explorer (из sysinternals) показывает, что рабочий каталог процесса - c: \ windows, а не рабочий каталог родителей.

Использование lpCurrentDirectory для жесткого кода рабочий каталог также не помогает.

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

EDIT Проблемный каталог не является каталогом модулей, а текущим рабочим каталогом.

каталог модулей ищется, как и ожидалось, но не содержит DLL (Копирование СРЛ в каталог модулей работает бут это, са обходной путь)

+2

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

ответ

2

При использовании функции CreateProcess, то первый каталог искали это каталог, содержащий файл изображения, используемый для создания вызывающего процесса. Это позволяет использовать файлы библиотеки виртуальной библиотеки (DLL), связанные с процессом, без добавления установочного каталога процесса в переменную среды PATH. Если файлы Dll не найдены, система ищет эти файлы в системных папках, таких как system32 или% windir%.

Путь поиска может быть изменен с использованием функции SetDllDirectory. Это решение рекомендуется вместо использования SetCurrentDirectory или жесткого кодирования полного пути к DLL.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682600%28v=vs.85%29.aspx

+0

Что делать, если запущенный процесс ищет файлы ресурсов, а не DLL? Он также, похоже, ищет, начиная с каталога, содержащего файл изображения, вместо IpCurrentDirectory или текущего каталога родителя. Я также попробовал SetDllDirectory, как вы предполагали, но это не повлияло. – Hughenot

 Смежные вопросы

  • Нет связанных вопросов^_^