使用CreateProcess()函数
; b+ ~3 A$ V! Q3 }' }8 l
& [5 w. A+ F, t& _ 以下是一个使用CreateProcess()函数的例子:
0 x/ e$ A$ ]- f( fvoid CreateChildProcessAndWaitUntilDone(const AnsiString& strCmdLine) 0 }" t m8 U. e) i- {. p8 h
{ 6 p& x0 t+ q# l
PROCESS_INFORMATION piProcInfo; 2 }( `- t/ g0 ?' Q! i
STARTUPINFO siStartInfo;
; W% F" f- Q: r2 X. z// Set up members of STARTUPINFO structure.
/ A7 j: W' E! gsiStartInfo.cb = sizeof(STARTUPINFO);
0 z% _6 u. N4 m( T; ~- V R# IsiStartInfo.lpReserved = NULL;
6 n3 g; h! v8 M0 psiStartInfo.lpReserved2 = NULL; ! Z; _- |9 y' V$ P# |# \9 k) Z
siStartInfo.cbReserved2 = 0;
. i' {- \1 n) ^/ ^siStartInfo.lpDesktop = NULL; & d7 o; ]1 i# H, z2 u
siStartInfo.dwFlags = 0; ; z+ w$ a7 H/ D3 B
9 J( O) o4 k5 X, q
// Create the child process.
% P3 L# T! A% aCreateProcess(
5 Z7 G8 T3 B+ Z& ?NULL,
3 w& ~7 _& F+ a. d( i7 ]strCmdLine.c_str(),$ L5 k: {( q7 q) n i, E
NULL, // process security attributes
/ o9 o: G' }) y7 K, uNULL, // primary thread security attributes' s% t9 b# F8 M( A8 x* D" q2 ]
0, // handles are inherited
$ n* b% u' A- p7 \5 f0 I0, // creation flags
& k2 |) u9 B. `3 p) H) ~NULL, // use parent's environment6 ]' ~8 w& @7 _$ @3 m
NULL, // use parent's current directory
* d* u7 r" l1 e7 | {" X9 e&siStartInfo, // STARTUPINFO pointer
3 j1 i% n6 @+ M&piProcInfo); // receives PROCESS_INFORMATION + U7 J( b/ a4 q, a: N
// Wait for the processs to finish
8 S- l, O. b( RDWORD rc = WaitForSingleObject(
: F0 o8 ^! d' K# I# A# NpiProcInfo.hProcess, // process handle6 l5 U7 g; I2 ^; _, X! u
INFINITE);
( x5 g; S: J7 w3 x$ [( {4 Y; S}, c! S% D; v8 E, W/ t7 Q- F
. Y( }: k- j8 M2 n4 W |