Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.09;
Скачать: CL | DM;

Вниз

CreateProcess и Winexec при работе с консольным приложением.   Найти похожие ветки 

 
Rash ©   (2002-07-18 00:16) [0]

Здравствуйте. Люди, объясните пожалуйста:
почему при таком коде:
if winexec(arjpchar, SW_HIDE) <= 31 then label3.caption:="Архивация не произведена"
else label3.caption:="Архивация завершена";
окно консоли не открывалось вообще,
а при этом :
sui.dwFlags := startf_UseShowWindow;
sui.wshowWindow:= SW_hide;

if not CreateProcess(nil, arjpchar, nil, nil, false, 0, nil, nil, sui, psi) then
begin
label3.caption:="failed";
Exit;
end;
CloseHandle(Psi.hThread);
WaitForSingleObject(Psi.hProcess, INFINITE);
CloseHandle(Psi.hProcess);

окно по окончанию архивации не закрывается? в справке написано, что winexec - это вызов CreateProcess. Мне надо чем-то заменить waitforsingleobject? (Делаю по примерам с форума)


 
Almaz ©   (2002-07-18 01:58) [1]


> Rash © (18.07.02 00:16)

Я запустил ваш пример под Win2000 - окно не появлялось не в одном из случаев. А какую систему используете вы ?

Удачи.


 
Rash ©   (2002-07-18 10:34) [2]

У меня 98 Windows.
Если убрать эту строку:
WaitForSingleObject(Psi.hProcess, INFINITE);
то все работает. Вопрос теперь в том, насколько корректным этот код будет как для 98 так и для 2000. Обязательно ли должна быть какая-нибудь функция ожидания события, или может, в этой должны быть какие-то другие параметры?


 
FLAME   (2002-07-18 16:11) [3]

>if winexec(arjpchar, SW_HIDE) <= 31 then >label3.caption:="Архивация не произведена"
>else label3.caption:="Архивация завершена";
>окно консоли не открывалось вообще
виной тому наверное SW_HIDE

>if not CreateProcess(nil, arjpchar, nil, nil, false, 0, nil, nil, sui, psi)
Почему dwCreationFlags=0? И зачем нужен CloseHandle(Psi.hThread)?
Я бы сделал так (IMHO):
IF not CreateProcess(nil, arjpchar, nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, sui, psi)then
begin
label3.caption:="failed";
Exit;
end else
begin
WaitForSingleObject(psi.hProcess,infinite);
CloseHandle(psi.hProcess);
//...//
end;
Чтобы окно закрывалось нужно создать соответствующий pif, либо вместо //...// программно закрывать консольное окно.


 
Rash ©   (2002-07-18 20:34) [4]

>виной тому наверное SW_HIDE
Так оно и есть, мне требуется , чтобы процесс был незаметен для пользователя.

WaitForSingleObject(psi.hProcess,infinite) - приводит к бесконечному ожиданию действия. Поэтому окно "сеанс завершен" остается. По его закрытию программа работает дальше. Мне же нужно, чтобы программа начинала работать дальше по завершению архивации, а не по закрытию окна.


 
Proton ©   (2002-07-18 22:47) [5]

> if winexec(arjpchar, SW_HIDE) <= 31 then
!!!! SW_HIDE - окно консоли все равно висит в памяти что не совсем корректно
> sui, psi
а вы их нулями заполняете ? и sizeof присваиваете?
я бы вам порекомендовал пользоваться не досовским архиватором а конслоным (win32) - все ваши проблемы сразу исчезнут
напрмер rar32 (если надо кину на мыло)

в консолнных архиваторах консоль сама закрывается а не ждет пока ее закроют
вот восмотри что я тебе придумал

procedure TForm1.Button1Click(Sender: TObject);
var si:STARTUPINFO;
pi:PROCESS_INFORMATION;
xc:cardinal;
begin
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
si.wShowWindow := SW_HIDE;
si.dwFlags := STARTF_USESHOWWINDOW;

CreateProcess(nil,
{$ifdef home}
PCHAR("rar32 a test.zip "+"C:\Video\nge\nge-01.viv")
{$else}
PCHAR("rar32 a test.zip "+Application.EXENAME)
{$endif}
,nil,nil,false,NORMAL_PRIORITY_CLASS,nil,nil,si,pi);
CloseHandle(Pi.hThread);
with tanimate.Create(self) do
begin
Parent := self;
Align := alClient;
BringToFront;
CommonAVI := aviCopyFiles;
Active := True;
StopFrame := 34;
while WaitForSingleObject(Pi.hProcess, 10) = WAIT_TIMEOUT do
Application.ProcessMessages;
free;
end;
if GetExitCodeProcess(Pi.hProcess,xc) then
showMessage(inttostr(xc));
CloseHandle(Pi.hProcess);
end;



Страницы: 1 вся ветка

Текущий архив: 2002.09.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
3-26860
GIL
2002-08-19 03:02
2002.09.09
Порча индексного файла


8-27125
Roksolan
2002-05-05 19:16
2002.09.09
Печать растров в реальных размерах


1-27035
Fly`
2002-08-27 15:50
2002.09.09
ListView.


14-27224
lds78
2002-08-09 10:59
2002.09.09
ZIP/UNZIP без VCL


3-26903
npAKtuk
2002-08-20 07:32
2002.09.09
Импорт в Access из CSV