CreateProcess не тръгва ?

7 отговора 160 прегледа
#1

CreateProcess не тръгва ?

Опитвам се да разбера как работи това чудо /CreateProcess/
Написал съм следния код, компилира се без грешки, но резултата
от извикването на функцията е False. /Изпълнимият файл съществува/

procedure TForm1.Button1Click(Sender: TObject);
var
AppName: string;
SI: TStartupInfo;
PI: TProcessInformation;

begin

AppName:='C:\NOTEPAD.EXE';

SI.cb:=SizeOF(TStartupInfo);

CreateProcess(@AppName, nil, nil, nil, False, 0, nil, nil, SI, PI);

end;

Къде ми е грешката?

Отговор
в отговор на ZC #2

Re: CreateProcess не тръгва ?

Потърси в по-старите теми ;-))) - това е дискутирано много пъти

---
Е т'ва е живот!
Отговор
в отговор на ZC #3

Re: CreateProcess не тръгва ?

Ako se useshtam pravilno, iskash samo da startirash edna programa. Za tova e po-dobre da polzvash WinExec ili ShellExecute. Eto i edin link:
[линк]
CreateProcess e udoben kogato iskash da kontrolirash procesa koito si suzdal, t.e. da mu imash handle-to. Otnosno polzvaneto mu, eto edin dobur link:
[линк]

чети и дишай по-леко
Отговор
в отговор на ZC #4

Re: CreateProcess не тръгва ?

Thanks a lot!!! Използвах линка от Delphi pages.

Ще използвувам тази техника за да пусна външен процес и да продължа чак когато е готов резултатът от неговото изпълнение. Чудя се обаче, ако искам да придам повече интерактивност как мога да съвместя изпълнението на функцията WaitForSingleObject() със един PregressBar или следва да се задоволя с анимация от типа "Working"?

Отговор
в отговор на ZC #5

Re: CreateProcess не тръгва ?

Чудя се обаче, ако искам да придам повече интерактивност как мога да съвместя изпълнението на функцията WaitForSingleObject() със един PregressBar или следва да се задоволя с анимация от типа "Working"?

Май нямаш голям опит в работа със събития, а?
Вместо параметъра INFINITE, слагаш някакъв период (напр. секунда-две), а изчакването WaitforSingleObject() го ограждаш в цикъл, от който да се излиза при сигнализирано събитие. В този цикъл ще опресняваш и ProgresBar-а.

Можеш да добавиш и второ събитие - авариен изход, защото какво ще правиш, ако стартирания процес забие?

Успех в експериментите!

Отговор
в отговор на ZC #6

Re: CreateProcess не тръгва ?

Това би било възможно само и единствено ако знаеш кога точно ще приключи процеса който си стартира - т.е. трябва да имаш обратна връзка от стартираня процес която да ти дава информация колко от работата е свършена!
Това оба4е в повечето случаи - когато става дума за външни приложения (както виждам от примера) не е възможно - или трудно реализируемо - най-малко ще трябва да промениш приложението - не само твоето. Така, че мърдащата картинка е по добрия вариант ;-))) - ако не прикаляваш с търпението на този който стои пред компютъра - съгласи се, че няма смисъл да стоиш 10 минути пред въртящ се часовник и да не знаеш колко още ще чакаш ;-))

---
Е т'ва е живот!
Отговор
в отговор на ZC #7

Re: CreateProcess не тръгва ?

Благодаря на всички,

... много съм тъп. Вторият въпрос /за ProgressBar/ не трябваше да го задавам.

А иначе, принципно, по отношение на прогреса след като веднъж получа хендъл-а на процеса и използвайки WaitForSingleObject() би трябвало да използвувам набор от функции на WIN API ниво за да проследя цялостно всички аспекти по изпълнението на моя процес, като това в един качествен софтуер се онагледява максимално информативно и разбира се графично.

Но млъкни сърце, все още сме далеч от такива "тежкарски" програми. Както казват в армията "остави, имаш желание"!

Още веднъж благодаря за коментарите!

Отговор
в отговор на ZC #8

Re: CreateProcess не тръгва ?

btw ne e mnogo tejkarsko ... i ne ti trqbwa mnogo - startiranoto prilojenie broadcastwa MSG startirashtoto SENDwa obratno kam nego s sobstweniq si HWND kato parameter i posle si menkat MSG-ta

------------------------------
I got a COMPILER, and I'm not afraid to use it!
Отговор