![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при createprocess [D6, WinXP]
Pasha L © (2005-09-26 00:05:00)Здравствуйте. Возникла непонятная проблема с createprocess. Вызываю его а мне выползает сообщение об ошибке.
The application failed to initialize properly (0xc0000142). Click on OK to terminate the application.
И при этом createprocess возвращает true. При вызове winexec для запуска той же проги всё происходит без запинки. Но в случае с winexec мне не дается хэндл запущенного процесса, что меня не устраивает. Пробовал ещё несколько программ. Вылезает эта же ошибка.
Pasha L (2005-09-27 17:15:00) [1]
> Такие вопросы, IMHO, для "Начинающих".
Не спорю, но не буду же я на полтемы обрываться и делать продолжение на форуме "для начинаючих"
А за ответ с разъяснением БОШЬШОЕ СПАСИБО
Leonid Troyanovsky (2005-09-27 09:02:00) [2]
> Pasha L © (26.09.05 23:31) [9]
> Поясните, пожалуйста. Что именно обнулять? Какие хэндлы
> закрывать?
Такие вопросы, IMHO, для "Начинающих".
FillChar(StartInfo, SizeOf(StartInfo), 0)
или, хотя бы, GetStartupInfo(StartInfo)
Закрывать надо CloseHandle - procinfo.hProcess & procinfo.hThread
сразу после того, как они стали более не нужны.
--
Regards, LVT.
Германн (2005-09-27 01:24:00) [3]2 Pasha L © (26.09.05 23:31) [9]
>Что именно обнулять?
У тебя startinfo - локальная переменная процедуры docommand.
Имхо, область памяти, на которую она указывает заполнена какими-то более - менее случайными значениями.
Piter (2005-09-27 00:26:00) [4]Pasha L © (26.09.05 23:31) [9]
Что именно обнулять?
видимо, startinfo
Pasha L (2005-09-26 23:31:00) [5]Leonid Troyanovsky © (26.09.05 18:57) [7]
Для работы brcc32.exe ничего вспомогательного не требуется.
> Обнулять startinfo будет Пушкин?
> Как и хендлы закрывать?
Поясните, пожалуйста. Что именно обнулять? Какие хэндлы закрывать?
GuAV (2005-09-26 19:07:00) [6]И зачем STARTF_USESTDHANDLES, если ни не заданы ?
Leonid Troyanovsky (2005-09-26 18:57:00) [7]
> Pasha L © (26.09.05 18:34) [5]
> эти файла находятся в папке с запускаемой программой.
И еще: раз уж brccc32 помещен в ту самую библиотеку,
то откуда он узнает про нужные ему библиотеки?
Или они тоже туда помещены в ту самую папку? ;)
--
Regards, LVT.
Leonid Troyanovsky (2005-09-26 18:48:00) [8]
> Pasha L © (26.09.05 18:34) [5]
> with startinfo do begin
> cb:=SizeOf(startinfo);
> dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
>
> wShowWindow:=SW_HIDE;
Хе-хе. Где мои пара битов? Обнулять startinfo будет Пушкин?
Как и хендлы закрывать?
Кроме того, Win32Check(CreateProcess()).
--
Regards, LVT.
Pasha L (2005-09-26 18:34:00) [9]
procedure docommand(aname,coms:string);
var
secattr:TSecurityAttributes;
procinfo:TProcessInformation;
startinfo:TStartupInfo;
nowpath:string;
begin
with secattr do begin
nLength:=sizeof(secattr);
lpSecurityDescriptor:=nil;
bInheritHandle:=bool(true);
end;
with startinfo do begin
cb:=SizeOf(startinfo);
dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
wShowWindow:=SW_HIDE;
end;
nowpath:=extractfilepath(paramstr(0));
nowpath:=copy(nowpath,1,length(nowpath)-1);
createprocess(pchar(aname),pchar(aname+' '+coms),@secattr,@secattr,bool(true),0,nil,pchar(nowpath),startinfo,procinfo);
В частности вызываюdocommand('brcc32.exe','my.rc'). Оба эти файла находятся в папке с запускаемой программой.
Leonid Troyanovsky (2005-09-26 09:58:00) [10]
> Pasha L © (26.09.05 00:05)
> Вызываю его а мне выползает сообщение об ошибке.
> The application failed to initialize properly (0xc0000142).
Спорю на пару бит, что TStartupInfo не инициализирована (properly).
--
Regards, LVT.
jack128 (2005-09-26 00:34:00) [11]из хелпа
CreateProcess returns without waiting for the new process to finish its initialization. For example, the creating process would use WaitForInputIdle before trying to find a window associated with the new process
Lamer@fools.ua (2005-09-26 00:28:00) [12]>> Pasha L © (26.09.05 00:05)
Код засекречен?
Lamer@fools.ua (2005-09-26 00:28:00) [13]P.S. В смысле, исходный код.