Wait for child process termination.
4 отговора
150 прегледа
Wait for child process termination.
Zdrawejte,
Opitwam se da startiram installatzia na drug product w nachaloto na installatziata na moia. (Konkretno txt redaktor predi IDE-to). Izpolzwam InstallShield, kojto iska az da si napisha dll kojto da izwurshi tzialata rabota po startiraneto na wtorata instalatzia.
Tuj kato iskam da izchakam tia da waruwhi predi az da produlgia izpolzwah:
::CreateProcess ( bla-bla-bla );
posle
::WaitForInputIdle() na suzdadenia process i sled towa:
::WaitForSingleObject() na handle-a na tozi process za da izchakam toj da swurshi.
Problema e che pri tazi combinatzia az chakam pusnatata instalatzia a tia ne se e pusnala (t.e. puska se do edin moment i dwata procesa umirat). Iasno che rabotata e ot INFINITE na WaitForSingleObject no ne mi e iasno kude burkam.
Predwaritelno blagodaria.
Opitwam se da startiram installatzia na drug product w nachaloto na installatziata na moia. (Konkretno txt redaktor predi IDE-to). Izpolzwam InstallShield, kojto iska az da si napisha dll kojto da izwurshi tzialata rabota po startiraneto na wtorata instalatzia.
Tuj kato iskam da izchakam tia da waruwhi predi az da produlgia izpolzwah:
::CreateProcess ( bla-bla-bla );
posle
::WaitForInputIdle() na suzdadenia process i sled towa:
::WaitForSingleObject() na handle-a na tozi process za da izchakam toj da swurshi.
Problema e che pri tazi combinatzia az chakam pusnatata instalatzia a tia ne se e pusnala (t.e. puska se do edin moment i dwata procesa umirat). Iasno che rabotata e ot INFINITE na WaitForSingleObject no ne mi e iasno kude burkam.
Predwaritelno blagodaria.
Re: Wait for child process termination.
InstallShield Script-a ima funkciq tochno za tazi cel. v momenta nqmam reference-a mu i ne moga da ti kaja tochno imeto i, no mojesh i sam da q namerish. ediniq ot parametrite e dali funkciqta da izchaka procesa da izleze ili samo da go pusne bez da chaka
Re: Wait for child process termination.
Примерчето долу създава процес и чака процеса да свърши
unsigned WaitExec(const AnsiString & _Process)
{
PROCESS_INFORMATION PI;
STARTUPINFO SI;
memset (&PI, 0, sizeof(PROCESS_INFORMATION));
memset (&SI, 0, sizeof(STARTUPINFO));
SI.cb = sizeof(STARTUPINFO);
SI.lpReserved = NULL;
SI.lpDesktop = NULL;
SI.lpTitle = NULL;
SI.dwX = 0;
SI.dwY = 0;
SI.dwXSize = 0;
SI.dwYSize = 0;
SI.dwXCountChars = 0;
SI.dwYCountChars = 0;
SI.dwFillAttribute = 0;
SI.dwFlags = STARTF_USESHOWWINDOW | STARTF_USEPOSITION | STARTF_USESIZE;
SI.wShowWindow = SW_HIDE;
SI.cbReserved2 = 0;
SI.lpReserved2 = NULL;
SI.hStdInput = (void*)STARTF_USESTDHANDLES;
SI.hStdOutput =(void*)STARTF_USESTDHANDLES;
SI.hStdError = (void*)STARTF_USESTDHANDLES;
if (CreateProcess(NULL, _Process.c_str(), NULL, NULL, false, DETACHED_PROCESS | NORMAL_PRIORITY_CLASS, NULL, NULL, &SI, &PI))
{
DWORD EC = STILL_ACTIVE;
do
{
SleepEx(100, false);
GetExitCodeProcess(PI.hProcess, &EC);
}
while (EC == STILL_ACTIVE);
return EC;
}
return 0;
}
Re: Wait for child process termination.
Hmm, az susto ia tursih no ne mogah da ia otkria. Dori na edno miasto mi se miarna che versiata na InstallSchield-a kojato pozlwam zaedno s VC++ ne poddurgia podobna funcia.