CreateProcess не тръгва ?
7 отговора
160 прегледа
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;
Къде ми е грешката?
Написал съм следния код, компилира се без грешки, но резултата
от извикването на функцията е 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;
Къде ми е грешката?
Re: CreateProcess не тръгва ?
Потърси в по-старите теми ;-))) - това е дискутирано много пъти
---
Е т'ва е живот!
---
Е т'ва е живот!
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:
[линк]
чети и дишай по-леко
[линк]
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:
[линк]
чети и дишай по-леко
Re: CreateProcess не тръгва ?
Ще използвувам тази техника за да пусна външен процес и да продължа чак когато е готов резултатът от неговото изпълнение. Чудя се обаче, ако искам да придам повече интерактивност как мога да съвместя изпълнението на функцията WaitForSingleObject() със един PregressBar или следва да се задоволя с анимация от типа "Working"?
Re: CreateProcess не тръгва ?
Чудя се обаче, ако искам да придам повече интерактивност как мога да съвместя изпълнението на функцията WaitForSingleObject() със един PregressBar или следва да се задоволя с анимация от типа "Working"?
Май нямаш голям опит в работа със събития, а?
Вместо параметъра INFINITE, слагаш някакъв период (напр. секунда-две), а изчакването WaitforSingleObject() го ограждаш в цикъл, от който да се излиза при сигнализирано събитие. В този цикъл ще опресняваш и ProgresBar-а.
Можеш да добавиш и второ събитие - авариен изход, защото какво ще правиш, ако стартирания процес забие?
Успех в експериментите!
Май нямаш голям опит в работа със събития, а?
Вместо параметъра INFINITE, слагаш някакъв период (напр. секунда-две), а изчакването WaitforSingleObject() го ограждаш в цикъл, от който да се излиза при сигнализирано събитие. В този цикъл ще опресняваш и ProgresBar-а.
Можеш да добавиш и второ събитие - авариен изход, защото какво ще правиш, ако стартирания процес забие?
Успех в експериментите!
Re: CreateProcess не тръгва ?
Това би било възможно само и единствено ако знаеш кога точно ще приключи процеса който си стартира - т.е. трябва да имаш обратна връзка от стартираня процес която да ти дава информация колко от работата е свършена!
Това оба4е в повечето случаи - когато става дума за външни приложения (както виждам от примера) не е възможно - или трудно реализируемо - най-малко ще трябва да промениш приложението - не само твоето. Така, че мърдащата картинка е по добрия вариант ;-))) - ако не прикаляваш с търпението на този който стои пред компютъра - съгласи се, че няма смисъл да стоиш 10 минути пред въртящ се часовник и да не знаеш колко още ще чакаш ;-))
---
Е т'ва е живот!
Това оба4е в повечето случаи - когато става дума за външни приложения (както виждам от примера) не е възможно - или трудно реализируемо - най-малко ще трябва да промениш приложението - не само твоето. Така, че мърдащата картинка е по добрия вариант ;-))) - ако не прикаляваш с търпението на този който стои пред компютъра - съгласи се, че няма смисъл да стоиш 10 минути пред въртящ се часовник и да не знаеш колко още ще чакаш ;-))
---
Е т'ва е живот!
Re: CreateProcess не тръгва ?
Благодаря на всички,
... много съм тъп. Вторият въпрос /за ProgressBar/ не трябваше да го задавам.
А иначе, принципно, по отношение на прогреса след като веднъж получа хендъл-а на процеса и използвайки WaitForSingleObject() би трябвало да използвувам набор от функции на WIN API ниво за да проследя цялостно всички аспекти по изпълнението на моя процес, като това в един качествен софтуер се онагледява максимално информативно и разбира се графично.
Но млъкни сърце, все още сме далеч от такива "тежкарски" програми. Както казват в армията "остави, имаш желание"!
Още веднъж благодаря за коментарите!
... много съм тъп. Вторият въпрос /за ProgressBar/ не трябваше да го задавам.
А иначе, принципно, по отношение на прогреса след като веднъж получа хендъл-а на процеса и използвайки WaitForSingleObject() би трябвало да използвувам набор от функции на WIN API ниво за да проследя цялостно всички аспекти по изпълнението на моя процес, като това в един качествен софтуер се онагледява максимално информативно и разбира се графично.
Но млъкни сърце, все още сме далеч от такива "тежкарски" програми. Както казват в армията "остави, имаш желание"!
Още веднъж благодаря за коментарите!
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!
------------------------------
I got a COMPILER, and I'm not afraid to use it!