· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› CreateProcess и обработка ошибок

Посл.отвђт Сообщенiе


Дата: Сен 9, 2004 02:43:09

Если при загрузке exe не может найти каких-то dll, то loader показывает соответствующее сообщение (которое можно отключать через SetErrorMode) и закрывает программу. К сожалению, CreateProcess возвращает 1 еще до того как loader начнет грузить dll. Можно ли как-нибудь програмно запустив exe получить сообщение об ошибке (и обработать внутри программы которая запустила этот exe) если запущенный exe не нашел нужных библиотек? Вариант запускать exe в отладочном режиме исключается, так как от этого страдает скорость выполнения.


Дата: Сен 9, 2004 23:39:12

Тоже когда-то хотел разобраться , а потом забил .
Может пригодиться , если кто подскажет каким нормальным способом это можно узнать (кто не понял вопроса , пример в аттаче) .

Там вроде получаеться обьекты процесс и поток создаються без ошибок , а в entrypoint стартуемого модуля управление не передаёться . И из нового процесса выгружаються все модули .

_185093951__createprocess.zip


Дата: Сен 10, 2004 00:37:56

Решил я таки проблему. Ключ в том что можно сразу после CreateProcess сделать CreateRemoteThread, и этот созданный поток начнет выполняться только после того, как луадер загрузит все dll-ки. Т.е. если в CreateRemoteThread передать указатель на ::FreeLibrary и параметр 0, то этот трэд ничего не сделает и сразу выйдет, но начнет выполняться после всех инициализаций. Т.е. как только этот трэд перестал существовать - значит все проинициализировалось. Ну а ошибку можно легко перехватить/узнать следя за top level windows создаваемые csrss.exe (который и показывает сообщение о отсутствующей dll). Только оказалось что на windows terminal server, этих csrss.exe может несколько штук быть одновременно, но если это учесть, то все работает замечательно.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.054