CreatePipe鍜孋reateProcess鍑芥暟鎬庝箞浣跨敤
CreatePipe鍑芥暟鐢ㄤ簬鍒涘缓涓€涓尶鍚嶇閬擄紝CreateProcess鍑芥暟鐢ㄤ簬鍒涘缓涓€涓柊鐨勮繘绋嬨€備笅闈㈡槸瀹冧滑鐨勪娇鐢ㄦ柟娉曪細
銆怌reatePipe鍑芥暟銆?/p>
BOOL CreatePipe(
PHANDLE hReadPipe,
PHANDLE hWritePipe,
LPSECURITY_ATTRIBUTES lpPipeAttributes,
DWORD nSize
);
-
hReadPipe鍜宧WritePipe锛氭帴鏀跺垱寤虹殑鍖垮悕绠¢亾鐨勫彞鏌勶紝涓€涓敤浜庤鍙栨暟鎹紝涓€涓敤浜庡啓鍏ユ暟鎹€?/p>
-
lpPipeAttributes锛氭寚鍚慡ECURITY_ATTRIBUTES缁撴瀯鐨勬寚閽堬紝鐢ㄤ簬鎸囧畾绠¢亾鐨勫畨鍏ㄥ睘鎬с€傚鏋滀负NULL锛屽垯榛樿涓轰笉缁ф壙鍙ユ焺銆?/p>
-
nSize锛氭寚瀹氱閬撶殑缂撳啿鍖哄ぇ灏忥紝濡傛灉涓?锛屽垯浣跨敤榛樿澶у皬銆?/p>
銆怌reateProcess鍑芥暟銆?/p>
BOOL CreateProcess(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
-
lpApplicationName锛氬彲鎵ц鏂囦欢鐨勫悕绉帮紙鍙€夛級銆?/p>
-
lpCommandLine锛氬懡浠よ鍙傛暟銆?/p>
-
lpProcessAttributes鍜宭pThreadAttributes锛氭寚鍚慡ECURITY_ATTRIBUTES缁撴瀯鐨勬寚閽堬紝鐢ㄤ簬鎸囧畾杩涚▼鍜岀嚎绋嬬殑瀹夊叏灞炴€с€?/p>
-
bInheritHandles锛氭寚绀烘柊杩涚▼鏄惁缁ф壙鐖惰繘绋嬬殑鍙ユ焺銆?/p>
-
dwCreationFlags锛氭寚瀹氳繘绋嬬殑鍒涘缓鏍囧織銆?/p>
-
lpEnvironment锛氭寚瀹氭柊杩涚▼鐨勭幆澧冨彉閲忥紙鍙€夛級銆?/p>
-
lpCurrentDirectory锛氭寚瀹氭柊杩涚▼鐨勫綋鍓嶅伐浣滅洰褰曪紙鍙€夛級銆?/p>
-
lpStartupInfo锛氭寚鍚慡TARTUPINFO缁撴瀯鐨勬寚閽堬紝鐢ㄤ簬鎸囧畾鏂拌繘绋嬬殑涓荤獥鍙e瑙傚拰鍏朵粬灞炴€с€?/p>
-
lpProcessInformation锛氭寚鍚慞ROCESS_INFORMATION缁撴瀯鐨勬寚閽堬紝鐢ㄤ簬鎺ユ敹鏂拌繘绋嬬殑鐩稿叧淇℃伅锛屽杩涚▼鍙ユ焺銆佷富绾跨▼鍙ユ焺绛夈€?/p>
浣跨敤绀轰緥锛?/p>
HANDLE hReadPipe, hWritePipe;
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE; // 鍏佽瀛愯繘绋嬬户鎵垮彞鏌?/span>
sa.lpSecurityDescriptor = NULL;
// 鍒涘缓绠¢亾
if (!CreatePipe(&hReadPipe, &hWritePipe, &sa, 0)) {
// 澶勭悊鍒涘缓绠¢亾澶辫触鐨勬儏鍐?/span>
return;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.hStdError = hWritePipe; // 灏嗘爣鍑嗛敊璇緭鍑洪噸瀹氬悜鍒扮閬撳啓鍏ョ
si.hStdOutput = hWritePipe; // 灏嗘爣鍑嗚緭鍑洪噸瀹氬悜鍒扮閬撳啓鍏ョ
si.dwFlags |= STARTF_USESTDHANDLES; // 浣跨敤閲嶅畾鍚戝彞鏌?/span>
// 鍒涘缓杩涚▼
if (!CreateProcess(NULL, // 涓嶆寚瀹氬彲鎵ц鏂囦欢鐨勫悕绉?/span>
"executable.exe", // 鍛戒护琛屽弬鏁?/span>
NULL, // 杩涚▼瀹夊叏灞炴€?/span>
NULL, // 绾跨▼瀹夊叏灞炴€?/span>
TRUE, // 缁ф壙鍙ユ焺
0, // 鍒涘缓鏍囧織
NULL, // 鐜鍙橀噺
NULL, // 褰撳墠宸ヤ綔鐩綍
&si, // STARTUPINFO
&pi // PROCESS_INFORMATION
)) {
// 澶勭悊鍒涘缓杩涚▼澶辫触鐨勬儏鍐?/span>
return;
}
// 鍏抽棴绠¢亾鐨勮绔拰鍐欑
CloseHandle(hReadPipe);
CloseHandle(hWritePipe);
鍦ㄤ笂闈㈢殑绀轰緥涓紝CreatePipe鍑芥暟琚敤浜庡垱寤轰竴涓尶鍚嶇閬擄紝鍏朵腑hReadPipe鐢ㄤ簬璇诲彇鏁版嵁锛宧WritePipe鐢ㄤ簬鍐欏叆鏁版嵁銆侰reateProcess鍑芥暟鍒涘缓涓€涓柊鐨勮繘绋嬶紝骞跺皢鏍囧噯杈撳嚭鍜屾爣鍑嗛敊璇緭鍑洪噸瀹氬悜鍒扮閬撶殑鍐欏叆绔紝浣垮緱瀛愯繘绋嬬殑杈撳嚭鍙互閫氳繃绠¢亾浼犻€掔粰涓昏繘绋嬨€傛渶鍚庯紝閫氳繃CloseHandle鍑芥暟鍏抽棴绠¢亾鐨勮绔拰鍐欑銆?/p>