|
使用CreateProcess()函数 S. { z+ e4 N. T% k
1 i) O2 ?4 h6 B" n8 H
以下是一个使用CreateProcess()函数的例子:
3 h: Z7 n/ s# Ovoid CreateChildProcessAndWaitUntilDone(const AnsiString& strCmdLine)
- Y0 V7 o: I" G0 j1 E/ @2 d, u{
) l. I: ^! B* A2 U1 o9 WPROCESS_INFORMATION piProcInfo; & j! ] l1 \) l2 O8 I! |+ P6 y
STARTUPINFO siStartInfo;
% f( b, i* H( f! c2 J// Set up members of STARTUPINFO structure.
! ~0 f& s! C& \0 N" x0 ssiStartInfo.cb = sizeof(STARTUPINFO); ) b8 I$ j6 }- n+ [* Q* c3 s
siStartInfo.lpReserved = NULL;
& N+ {9 G, } i$ JsiStartInfo.lpReserved2 = NULL; % ~. F2 i& W1 B# K! {
siStartInfo.cbReserved2 = 0;* k, E+ {" A- c; d
siStartInfo.lpDesktop = NULL;
' V8 N; G7 m3 ?+ D4 |- q0 i. osiStartInfo.dwFlags = 0;
8 a* X. H! U& q: H t
3 D; t* F6 L0 \. n+ p' |// Create the child process.- C3 D& O' }# G8 f/ D' ~+ L3 Z. z
CreateProcess( ; a2 z, _! T, K, Q! \
NULL,& a1 n# O; E# ~% U
strCmdLine.c_str(), Z' K7 e( C/ @1 ^& s# ^% }2 I5 y
NULL, // process security attributes
( Q1 u3 E" n6 l7 }/ D- d( uNULL, // primary thread security attributes" n& q- O, E) N* ^% z% r% c# d
0, // handles are inherited" }4 o- }5 V( _( [3 ~) Q" `
0, // creation flags" U; `' s8 I9 J
NULL, // use parent's environment
* h! h9 | u- e G0 HNULL, // use parent's current directory
7 G/ ^0 A( J. n1 |! v' p, ^&siStartInfo, // STARTUPINFO pointer
4 p8 h$ U9 T& N3 t! Z, C3 b&piProcInfo); // receives PROCESS_INFORMATION 8 c/ r! l$ Y- L! c# N
// Wait for the processs to finish' }- V& d% n3 `: e
DWORD rc = WaitForSingleObject(9 Y4 M6 V6 r. O r9 b1 F) i2 x7 @
piProcInfo.hProcess, // process handle0 O& |$ B) A# z+ J/ b
INFINITE);
; j6 `6 [$ W" p! h, V2 i. n5 p; d}
' B( ^& y5 }/ q2 |$ m- M
) w9 N1 N7 a8 ?9 A# l: S, c |