Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при 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. В смысле, исходный код.


Наверх

Титульная страница Поиск, карта сайта Написать письмо