使用CreateProcess()函数/ }/ Z' z2 A" D; K% I/ z( n) O
* i5 k: y: q9 l! n5 H
以下是一个使用CreateProcess()函数的例子: + Q4 v6 u& j! Y. e% O1 w
void CreateChildProcessAndWaitUntilDone(const AnsiString& strCmdLine) ( N) R( \: b {/ Q* R' }& V
{ , `) V& J4 M0 f2 C* S \
PROCESS_INFORMATION piProcInfo; . G* i& J. O! f Q; s
STARTUPINFO siStartInfo;
) b! [7 j8 g- U0 r A) ^5 y( y B: z// Set up members of STARTUPINFO structure.! k) c T+ ^ P, ~
siStartInfo.cb = sizeof(STARTUPINFO);
8 S7 K& d' m+ i" b2 ?siStartInfo.lpReserved = NULL;
- K, f( D( e4 ]4 G' J4 W- ksiStartInfo.lpReserved2 = NULL;
1 e4 x! S1 l4 {siStartInfo.cbReserved2 = 0;( m5 k6 T, K# J8 ]) c
siStartInfo.lpDesktop = NULL;
# D5 z) y& m! y* G9 a( s- AsiStartInfo.dwFlags = 0;
5 I1 \( q- P7 l$ w
* T! j) U- R* J: s7 m+ h// Create the child process.. T1 F0 h; [# U0 p/ f: O0 y8 w7 z) G1 w
CreateProcess(
' Z0 O, A" H+ Y; \' E# X8 ZNULL,; u! V9 [0 L+ M% G" F
strCmdLine.c_str(),; i( x. ]' Y+ }. r8 p
NULL, // process security attributes/ U0 U; ~7 K3 Q2 @
NULL, // primary thread security attributes
6 y: }- y$ L$ T: h5 g' F0, // handles are inherited2 A' w. j0 x+ p
0, // creation flags* ]! H+ T( l2 q1 m! Q; _. g
NULL, // use parent's environment
, J. |% w2 Y- ^0 q# HNULL, // use parent's current directory
& T+ J' H3 k3 f. Q$ Z) E&siStartInfo, // STARTUPINFO pointer4 o, T- j* E0 O2 J- `
&piProcInfo); // receives PROCESS_INFORMATION
, d9 v, m7 k! F1 I0 y2 o0 y8 B// Wait for the processs to finish
" s7 p, e+ P* ^& p9 J: y5 MDWORD rc = WaitForSingleObject(; u( R$ p5 o7 ]: F; ~& q& @ A
piProcInfo.hProcess, // process handle
; ]% _, g( m: j: s) h# jINFINITE); 1 L9 i9 I0 b5 q$ y4 C
}1 [0 F" _6 Q2 L* L
. T- Q0 }% T* ^- r6 e! @0 t- \
|