扫描二维码下载沐宇APP

沐宇

微信扫码使用沐宇小程序

沐宇

CreatePipe鍜孋reateProcess鍑芥暟鎬庝箞浣跨敤

扬州沐宇科技
2023-09-28 21:45:00
CreatePipe

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>

扫码添加客服微信