ПредишенСледващото

CreateProcess и Winexec, когато работите с приложение за конзолата.

Здравейте Хората, моля обяснете:
Затова в този код:
ако winexec (arjpchar, SW_HIDE) <= 31 then label3.caption:="Архивация не произведена"
останало label3.caption: = "Backup завършен";
прозорец на конзолата не отвори изобщо,
и в същото време.
sui.dwFlags: = startf_UseShowWindow;
sui.wshowWindow: = SW_hide;

ако не CreateProcess (нула, arjpchar, нула, нула, фалшиво, 0, нула, нула, особеното, ИОС), тогава
започвам
label3.caption: = "провали";
Exit;
приключи;
CloseHandle (Psi.hThread);
WaitForSingleObject (Psi.hProcess, безкрайност);
CloseHandle (Psi.hProcess);

в края на прозореца на резервната не е затворен? Помощ е записано, че winexec - предизвикателство за CreateProcess. Имам нужда от нещо, което да замени waitforsingleobject? (Правя Примери от форума)

> Ако winexec (arjpchar, SW_HIDE) <= 31 then>label3.caption: = "Backup не се прави"
> Иначе label3.caption: = "Backup завършен";
> Прозорец на конзолата не отвори изобщо
причината е вероятно SW_HIDE

> Ако не CreateProcess (нула, arjpchar, нула, нула, фалшиво, 0, нула, нула, особеното, ИОС)
Защо dwCreationFlags = 0? И защо имаме нужда CloseHandle (Psi.hThread)?
Щях да направя така (IMHO):
Ако не се CreateProcess (нула, arjpchar, нула, нула, фалшиво, CREATE_NEW_CONSOLE или NORMAL_PRIORITY_CLASS, нула, нула, особеното, ИОС), тогава
започвам
label3.caption: = "провали";
Exit;
сложи край на друг
започвам
WaitForSingleObject (psi.hProcess, безкраен);
CloseHandle (psi.hProcess);
//. //
приключи;
За да се затвори прозореца, на който трябва да се създаде подходящата PIF, или вместо //. // програмно затворете прозореца на конзолата.

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

WaitForSingleObject (psi.hProcess, безкрайност) - води до безкраен очакване на действие. Ето защо, на прозореца "сесия е изтекла" остава. В заключителната си програма се изпълнява на. Аз също трябва да получите програмата започна работа по изграждането на резервно копие, а не за да затворите прозореца.

> Ако winexec (arjpchar, SW_HIDE) <= 31 then
. SW_HIDE - прозорец на конзолата все още виси в паметта, която не е напълно вярно
> Sui, ИОС
и ти ги напълни с нули. и възлага sizeof?
Аз бих препоръчал да не се използва DOS архиватор и konslonym (win32) - всичките ви проблеми просто изчезват
naprmer rar32 (ако трябва да се хвърлят на сапун)

konsolnnyh архиватори в самата конзола е затворен вместо да чакате, докато не приключи
vosmotri е, което аз измислих

процедура TForm1.Button1Click (Sender: TObject);
Var SI: STARTUPINFO;
пи: PROCESS_INFORMATION;
XC: кардинална;
започвам
ZeroMemory (@ си, sizeof (SI));
si.cb: = SizeOf (SI);
si.wShowWindow: = SW_HIDE;
si.dwFlags: = STARTF_USESHOWWINDOW;

Памет: 0.73 MB
Време: 0.041 гр

Свързани статии

Подкрепете проекта - споделете линка, благодаря!