|
使用CreateProcess()函数
k1 G5 L- |" @. A # P, G- X) [* n4 N
以下是一个使用CreateProcess()函数的例子:
# `! a: V8 p* l" \& _3 mvoid CreateChildProcessAndWaitUntilDone(const AnsiString& strCmdLine) 5 l7 X1 K$ ?) Q4 L* b7 m4 t M/ h8 \
{ 9 C# K; H6 ]' P. y
PROCESS_INFORMATION piProcInfo; $ Y2 ^0 @, b# s5 k. D
STARTUPINFO siStartInfo;
9 A6 x. N- y* p) x! x2 Y// Set up members of STARTUPINFO structure.
( c* A* {5 }) D8 RsiStartInfo.cb = sizeof(STARTUPINFO); 7 T" s1 h& z7 u f6 h" z+ e! {
siStartInfo.lpReserved = NULL;: W; \7 t A, r! _! P3 X
siStartInfo.lpReserved2 = NULL;
& e$ H* Z. Q5 _ q$ WsiStartInfo.cbReserved2 = 0;
" F: V4 B) X$ A g: m: k( P' ]siStartInfo.lpDesktop = NULL;
8 _2 I2 U' a4 i1 x9 [# J4 msiStartInfo.dwFlags = 0;
, _6 R$ K. z# F# ^6 v9 ]. }1 S0 N& O% q7 Q* r' Y. {
// Create the child process." `# @( B* v% H, y7 y( D
CreateProcess( : U! q! G2 l t
NULL,$ j4 t' B7 x7 e# b' Z$ U
strCmdLine.c_str(),
P, m3 m) t" p. h8 }NULL, // process security attributes1 f' @8 T4 p" a- n. k9 u" P( S
NULL, // primary thread security attributes" n" l5 y, A2 T* t- H; R$ R! g
0, // handles are inherited9 q+ ~. t: T, v8 ^; L9 e
0, // creation flags: ?* o) J$ |6 O& X$ a" y3 ]
NULL, // use parent's environment
3 F: L- q* Y! C s$ C5 T* p% xNULL, // use parent's current directory
/ a! K2 L4 W5 l. i&siStartInfo, // STARTUPINFO pointer
: U( N! ?$ {% n k: q# L9 p&piProcInfo); // receives PROCESS_INFORMATION
, ^) Q. F0 x l8 O// Wait for the processs to finish
5 ]3 F8 O: @( I3 z0 VDWORD rc = WaitForSingleObject(; Z2 p W) @/ s% e9 o2 {4 [
piProcInfo.hProcess, // process handle
* J$ I' `/ O, q- x$ J& qINFINITE);
5 h5 ]! B6 W- J, [8 ~+ V- U}
/ h) R1 ?. k! ?/ L2 |! G! Q, R# q $ c0 W; E H3 {! T# [) X0 b% `7 | h
|