博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于CreateProcess函数一些经验
阅读量:6424 次
发布时间:2019-06-23

本文共 1578 字,大约阅读时间需要 5 分钟。

TCHAR szCmdLine[]={TEXT("E:\\CPL-server\\其他工具\\restartSrv\\bin\\opensavepath.exe")};	TCHAR static szCommandLine[MAX_PATH + 700] = {0};	lstrcpy(szCommandLine, pProgramPath);	STARTUPINFO si = {0};	ZeroMemory(&si, sizeof(si));	si.cb = sizeof(STARTUPINFO);	GetStartupInfo(&si);	si.wShowWindow = SW_SHOW;	si.dwFlags     = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;	// 运行进程	PROCESS_INFORMATION pi;	ZeroMemory(&pi, sizeof(pi));	BOOL bRet = FALSE;	bRet = CreateProcess(pProgramPath, NULL, NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi);	///
<关闭restartsrv不会关闭创建进程子窗口>
//BOOL bRet = CreateProcess( // NULL, // name of executable module // szCmdLine, // command line string // NULL, // process attributes // NULL, // thread attributes // FALSE, // handle inheritance option // CREATE_NEW_CONSOLE, // creation flags // NULL, // new environment block // NULL, // current directory name // &si, // startup information // &pi); // process information if( bRet ) { CloseHandle(pi.hThread); CloseHandle(pi.hProcess); } //ShellExecute(NULL, "open", szCmdLine, NULL, NULL, SW_SHOWNORMAL); return bRet;

  

都说通过createprocess函数创建的另一个进程(打开另一个程序),关闭父进程一般不会关闭子进程。

但是最近测试发现如果使用一个控制台程序使用createprocess函数打开另一个控制台程序,而且dwCreationFlags参数不指定为CREATE_NEW_CONSOLE或者DETACHED_PROCESS值。那么关闭父进程也会关闭子进程。

如果使用一个控制台程序使用createprocess函数打开的是一个窗口程序,关闭父进程确实不会关闭子进程。

另外在控制台程序中使用 ShellExecute(NULL, "open", szCmdLine, NULL, NULL, SW_SHOWNORMAL);打开一个进程控制台程序或者窗口程序,关闭父进程对子进程都没有影响。

 

所有,我猜测是因为使用控制台程序打开另一个控制台程序,不特别指定创建新控制台窗口或者脱离父进程,他们使用的是同一个控制台,没有创建新的控制台窗口,所有关闭这个控制台窗口相当于关闭了两个控制窗口。

转载地址:http://sygra.baihongyu.com/

你可能感兴趣的文章