Здравствуйте, cupuyc., Вы писали:
C>что говорит мсдн: C>126 — 7e: C>ERROR_MOD_NOT_FOUND C>126 (0x7E) C>The specified module could not be found. C>... модуль есть.
Подскажите плз, возможно ли из процесса А создать процесс Б и в процессе Б проверять загружаемость дллки, т.к. когда выгружаешь из процесса А дллку она тянет за собой несколько дллок которые необходимы процессу А и он падает.
> Подскажите плз, возможно ли из процесса А создать процесс Б и в процессе Б > проверять загружаемость дллки, т.к. когда выгружаешь из процесса А дллку она > тянет за собой несколько дллок которые необходимы процессу А и он падает.
>> Подскажите плз, возможно ли из процесса А создать процесс Б и в процессе Б >> проверять загружаемость дллки, т.к. когда выгружаешь из процесса А дллку она >> тянет за собой несколько дллок которые необходимы процессу А и он падает.
MZ>Не может быть.
может и не может, но факт в том, что процесс падает когда вызывается функция FreeLibrary()
> может и не может, но факт в том, что процесс падает когда вызывается функция > FreeLibrary()
Ну так не вызывай FreeLibrary. Вообще, когда и откуда ты вызываешь эту функцию?
Она достаточно опасна. Например, нельзя её вызывать, если не уверен на 100%,
что никакой код из этой библиотеки не выполняется и что на данные этой
библиотеки нет ссылок. А иначе будет защита памяти.
Здравствуйте, cupuyc., Вы писали:
C>Подскажите плз, возможно ли из процесса А создать процесс Б и в процессе Б проверять загружаемость дллки, т.к. когда выгружаешь из процесса А дллку она тянет за собой несколько дллок которые необходимы процессу А и он падает.
Вот ведь круто! А зачем? (с)
Это вот зачем вообще такое? Экономия на копейках или экзотика какая? Или учебная задача?
>> может и не может, но факт в том, что процесс падает когда вызывается функция >> FreeLibrary()
MZ>Ну так не вызывай FreeLibrary. Вообще, когда и откуда ты вызываешь эту функцию? MZ>Она достаточно опасна. Например, нельзя её вызывать, если не уверен на 100%, MZ>что никакой код из этой библиотеки не выполняется и что на данные этой MZ>библиотеки нет ссылок. А иначе будет защита памяти.
Собственно вот весь код:
HMODULE hLib;
hLib = LoadLibrary(object.fileNameFull);
if (hLib=NULL)
AfxMessageBox(object.fileNameFull + " - Не загружена!");
else
FreeLibrary(hLib);
Пробовал не вызывать FreeLibrary() тогда программа падает при выходе из нее.
Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, cupuyc., Вы писали:
C>>Подскажите плз, возможно ли из процесса А создать процесс Б и в процессе Б проверять загружаемость дллки, т.к. когда выгружаешь из процесса А дллку она тянет за собой несколько дллок которые необходимы процессу А и он падает. BFE>
BFE>Вот ведь круто! А зачем? (с)
BFE>Это вот зачем вообще такое? Экономия на копейках или экзотика какая? Или учебная задача?
Да вот, захотели буржуи, что бы в программе установки была автоматическая проверка загружаемости устанавливаемых ею dll.
> Да вот, захотели буржуи, что бы в программе установки была автоматическая > проверка загружаемости устанавливаемых ею dll.
Идиотизм. Они могут не загружаться в утановщике но загружаться в программе,
и наоборот. Манифесты могут быть указаны (они действуют на одно приложение)
и текущий каталог и содержимое PATH могут быть разными.
Здравствуйте, MasterZiv, Вы писали:
MZ>On 07/13/2012 12:23 PM, cupuyc. wrote:
>> >> HMODULE hLib; >> hLib = LoadLibrary(object.fileNameFull); >> if (hLib=NULL) >> AfxMessageBox(object.fileNameFull +" — Не загружена!"); >> else >> FreeLibrary(hLib);
>> Пробовал не вызывать FreeLibrary() тогда программа падает при выходе из нее.
MZ>А зачем вообще загружать её, если тут же она выгружается ?
Необходимо проверить загружаемость, т.е. подгрузить длл в память удостоверится что LoadLibrary отработает нормально без ошибок и выгрузить эту же длл из памяти за ненадобностью.
MZ>При выходе из кого ? выражайся яснее.
При выходе из программы проверки, в самом конце когда нажимаешь на крестик.
>>Идиотизм.
Ну как бы это не идиотизм а перестраховка на стадии установки. просто система работает в банковской сфере.
>>Они могут не загружаться в утановщике но загружаться в программе, >>и наоборот. Манифесты могут быть указаны (они действуют на одно приложение) >>и текущий каталог и содержимое PATH могут быть разными.
в том то и дело что они загружаются в проекте, я пытаюсь то же самое сделать и для установщика. Установка выполняется в каталоге проекта, т.е. пути все совпадают.
Здравствуйте, cupuyc., Вы писали:
>>>Идиотизм.
C>Ну как бы это не идиотизм а перестраховка на стадии установки. просто система работает в банковской сфере.
Ну, ты же сам видишь, что если они подгружаются в одном случае, не гарантирует, что они будут подгружаться в другом.
Может, по завершении установки производить первый запуск программы (например, с определенным параметром -selftest) и пусть она тестирует все ли в порядке.
Здравствуйте, cupuyc., Вы писали:
C>Необходимо проверить загружаемость, т.е. подгрузить длл в память удостоверится что LoadLibrary отработает нормально без ошибок и выгрузить эту же длл из памяти за ненадобностью.
Может просто проверять PE-файл на корректность? Т.е. сделать проверку, которая бы была аналогом ручной подгрузки DLL в память процесса.
И объясните заказчику что в этом случае достаточно обычной проверки формата файла.
Здравствуйте, acDev, Вы писали:
D>А ещё проще так:
D>LoadLibraryEx(lpFileName, hFile, LOAD_LIBRARY_AS_IMAGE)
а что значит флаг LOAD_LIBRARY_AS_IMAGE ?
>>Может просто проверять PE-файл на корректность?
даже не знаю, т.к. мне нужно проверять полную загрузку с проверкой всех зависимостей и т.д.
>>Может, по завершении установки производить первый запуск программы (например, с определенным параметром -selftest) и пусть она тестирует все ли в порядке.
в принципе это возможно, но оооочень уж геморно.
вот доступные из WINBASE.H, как то не густо:
#define DONT_RESOLVE_DLL_REFERENCES 0x00000001
#define LOAD_LIBRARY_AS_DATAFILE 0x00000002
#define LOAD_WITH_ALTERED_SEARCH_PATH 0x00000008
Здравствуйте, acDev, Вы писали:
D>Здравствуйте, cupuyc., Вы писали:
C>>этот вариант мне не подходит. мне как раз таки нужно что бы он проверял зависимости.
D>Ну прочитай сам таблицу импорта и загрузи все "зависимости" через LoadLibraryEx.
а почему через LoadLibraryEx ?