Createprocess și winexec când lucrați cu aplicația consolei

CreateProcess și Winexec când lucrați cu aplicația consolei.

Alo Oameni, vă rugăm să explicați:
de ce cu acest cod:
dacă winexec (arjpchar, SW_HIDE) <= 31 then label3.caption:="Архивация не произведена"






altul label3.caption: = "Arhivarea este completă";
Fereastra consolei nu se deschide deloc,
dar în același timp.
sui.dwFlags: = startf_UseShowWindow;
sui.wshowWindow: = SW_hide;

dacă nu CreateProcess (nil, arjpchar, nil, zero, false, 0, zero, nil, sui, psi) atunci
începe
label3.caption: = "nu a reușit";
Exit;
se încheie;
CloseHandle (Psi.hThread);
WaitForSingleObject (Psi.hProcess, INFINITE);
CloseHandle (Psi.hProcess);

Fereastra nu se închide după sfârșitul rezervării? în ajutor este scris că winexec este un apel la CreateProcess. Trebuie sa inlocuiesc ceva cu waitforsingleobject? (Fac exemplele din forum)

> în cazul în care winexec (arjpchar, SW_HIDE) <= 31 then>label3.caption: = "Arhivarea nu a fost efectuată"
> else label3.caption: = "Arhivarea este completă";
> fereastra consolei nu sa deschis deloc
defecțiunea probabil SW_HIDE

> dacă nu CreateProcess (zero, arjpchar, zero, zero, false, 0, zero, zero, sui, psi)






De ce dwCreationFlags = 0? Și de ce am nevoie de CloseHandle (Psi.hThread)?
Aș face acest lucru (IMHO):
DACĂ nu este CreateProcess (nil, arjpchar, nil, zero, false, CREATE_NEW_CONSOLE sau NORMAL_PRIORITY_CLASS, zero, nil, sui, psi) atunci
începe
label3.caption: = "nu a reușit";
Exit;
incheie altceva
începe
WaitForSingleObject (psi.hProcess, infinit);
CloseHandle (psi.hProcess);
//. //
se încheie;
Pentru a închide fereastra, trebuie să creați pif-ul corespunzător sau în loc de //. // închideți fereastra consolei programabil.

> defecțiunea este probabil SW_HIDE
Deci este, am nevoie de ea. astfel încât procesul este invizibil pentru utilizator.

WaitForSingleObject (psi.hProcess, infinit) - duce la o așteptare infinită pentru acțiune. Prin urmare, fereastra "sesiune terminată" rămâne. La închidere, programul funcționează. De asemenea, am nevoie ca programul să înceapă să funcționeze după finalizarea copiei de rezervă și să nu închidă fereastra.

> în cazul în care winexec (arjpchar, SW_HIDE) <= 31 then
. SW_HIDE - fereastra consolei rămâne încă în memorie, ceea ce nu este complet corect
> sui, psi
și le umpleți cu zerouri. și sizeof atribuie?
Aș recomanda să folosiți un arhivator non-Dosov și un coblin (win32) - toate problemele dvs. vor dispărea imediat
orimer rar32 (dacă trebuie să arunci pe săpun)

în consolă arhive, consolă în sine se închide și nu așteaptă până când este închis
Uite ce credeam despre tine

procedura TForm1.Button1Click (expeditor: TObject);
var si: STARTUPINFO;
pi: PROCESS_INFORMATION;
xc: cardinal;
începe
ZeroMemory (@ și, sizeof (si));
si.cb: = DimensiuneaOf (si);
si.wShowWindow: = SW_HIDE;
si.dwFlags: = STARTF_USESHOWWINDOW;

Memorie: 0,73 MB
Durată: 0.041 sec







Articole similare

Trimiteți-le prietenilor: