|
使用CreateProcess()函数
7 ?# h% [ F0 r) W* W# L
) D8 n7 Q4 a$ q" V 以下是一个使用CreateProcess()函数的例子: , g& U* J8 X" }$ w6 s! x- m
void CreateChildProcessAndWaitUntilDone(const AnsiString& strCmdLine) + j G7 i. i7 b5 H% a
{ & d0 F! |5 v9 f% Q
PROCESS_INFORMATION piProcInfo;
; x( ]9 ]' e+ ~5 U, z. D1 y) dSTARTUPINFO siStartInfo;
$ q" |+ t" q% u; u: g/ Z// Set up members of STARTUPINFO structure.
/ Q# U& ]9 [2 ?& s# L* l. n" b' usiStartInfo.cb = sizeof(STARTUPINFO);
( k4 d0 U/ s7 N6 h9 HsiStartInfo.lpReserved = NULL;
4 f' D' r1 C& C3 ~siStartInfo.lpReserved2 = NULL;
1 A# a4 k( h; t% G% B2 | m8 u" qsiStartInfo.cbReserved2 = 0;+ k0 Z3 ]. ]0 r& ?- w5 o
siStartInfo.lpDesktop = NULL;
) }# k! o, k3 i IsiStartInfo.dwFlags = 0;
. p0 T4 t+ {% B, x8 P) @# o e3 z9 T- E4 z* y& T
// Create the child process.: p0 W5 x* W) l1 k
CreateProcess(
4 N9 _' |* S P6 N/ M6 C$ VNULL,
; F9 B( l+ p. @0 j s2 rstrCmdLine.c_str(),
+ p/ o$ D" h- L" N* m3 Z2 ENULL, // process security attributes
% F% A1 X( L; w1 U2 G& f2 ]NULL, // primary thread security attributes
" a. `8 {' ]+ C1 t5 b0, // handles are inherited+ l' ?" Q% w( }/ B
0, // creation flags" Y8 E& m/ I" X6 o2 O
NULL, // use parent's environment
4 l6 b7 X) \) J; e3 L5 W% PNULL, // use parent's current directory
$ b' R8 \+ c* q& `; |&siStartInfo, // STARTUPINFO pointer0 l& O, X0 W4 X& s5 U4 a* [7 @
&piProcInfo); // receives PROCESS_INFORMATION
* i6 v7 d5 v& A( R- J// Wait for the processs to finish8 s V' {. w# H. a- u
DWORD rc = WaitForSingleObject(' z4 g9 I4 S4 Y8 `. x/ V% g
piProcInfo.hProcess, // process handle
, q( A6 @& `% v4 @# vINFINITE); * ?# c7 |9 J4 \4 w. V
}0 X. \/ Z8 q5 ~9 T
, l& Z9 a' x0 N
|