当需要生成子进程的时候,需要用CreateProcess,第一个参数指定EXE所在完整路径,其实这个路径有空格和没空格都没什么问题, 第二个参数是传入的参数列表,参数之间是用空格隔开的,如果其中一个参数中有空格,像"c://program file//cmd.exe"这样,传进去的参数列表,会出现如下,argv[0] = "c://progeam" argv[1] = "file//cmd.exe",不是我们想要的,其实可以这样:
CStringGetCrrectInput(const CString & szInput)
{
// 为了解决传入参数中有空格的问题
CString szDest = szInput;
// 判断是否有空格
if(szDest.Find(' ') < 0)
{
// 没有空格
return szDest;
}
// 有空格,用转义符处理
CString szSpaceFormat = _T("/"%s/"");
szDest.Format(szSpaceFormat,szInput);
return szDest;
}
// 用法如下
void CreateChildProcess()
{
STARTUPINFO sInfo;
PROCESS_INFORMATION pInfo;
SECURITY_ATTRIBUTES security;
security.bInheritHandle = TRUE;
security.lpSecurityDescriptor = NULL;
security.nLength = sizeof(SECURITY_ATTRIBUTES);
ZeroMemory(&sInfo, sizeof STARTUPINFO);
ZeroMemory(&pInfo, sizeof PROCESS_INFORMATION);
sInfo.cb = sizeof(STARTUPINFO);
// 传入的参数有空格的
CString szCmd = _T("c://program files//cmd.exe");
CString szCmdData = GetCrrectInput(szCmd );
LPWSTR lpwCmd = (LPWSTR)szCmdData.GetString();
// 获取EXE全路径
CString szApplicationName = GetFullFileName();
BOOL bRetVal = CreateProcess(szApplicationName, lpwCmd, NULL, NULL,
FALSE,NORMAL_PRIORITY_CLASS, NULL, NULL, &sInfo, &pInfo);
if(!bRetVal)
{
CLog::LogMessage(LOG_LEVEL_INFO,TRUE,_T(" CreateProcess failed (%d) "),GetLastError());
return;
}
// 等待子进程结束
::WaitForSingleObject(pInfo.hProcess, INFINITE);
// 关闭子进程句柄
CloseHandle(pInfo.hProcess);
CloseHandle(pInfo.hThread);
}
分享到:
相关推荐
解决CreateProcess error 740
eclipse提示CreateProcess error=87错误的解决方法,有可能是因为因为eclipse里设置的某个环境变量路径太长太深导致。
通过进程打开另一个进程的三种方法:CreateProcess,WinExec,ShellExecute ,给出了调用的实现代码,源码中有CreateProcess,ShellExecute的函数说明,包含一个可执行的演示程序和源码 用VC2008编写的
用CreateProcess创建进程 用CreateProcess创建进程 用CreateProcess创建进程 用CreateProcess创建进程
一个运用CREATEPROCESS()打开一个程序的实例
用CreateProcess创建进程后,得到主窗口句柄。
CreateProcess函数 详细使用说明
createprocess创建进程并获取进程窗口HWND,不管窗口是否在显示状态都可以获取。
通过使用APIhook拦截CreateProcess函数实现应用程序拦截。
VS2010开发。 在DLLMain中修改createprocess代码实现hook。 功能将创建的进程的可执行文件路径记入文件。
以CreateProcess为例运行系统程序并输出结果 以CreateProcess为例运行系统程序并输出结果 以CreateProcess为例运行系统程序并输出结果
利用管道执行cmd,显示回显内容,管道加createprocess实现该功能
2.保证无毒 3.简单,方便,实用 4.实例可以自行改用 5.如有非法,本人无法律责任,由改动代码人负责! 6.需要更多本人作品,查找标签“朱建强” 7.请下载,杀毒后再使用!
写入了两种打开程序的方法,代码里修改要打开的程序路径即可测试
windows下eclipse跑junit报错:CreateProcess error=206后面跟着乱码。 把这个jar替换掉就好了,放在:eclipse/plugins/下面。 参考:https://bugs.eclipse.org/bugs/show_bug.cgi?id=327193
API_HOOK_CreateProcess知道你运行哪些程序.zip
子进程一直在输出“child process is talking at【system time】” 父进程一直在输出“parent process is····” 由两个窗口分别显示
gradle-util-plugins:修复了Windows gradle长类路径问题。 修复了错误消息为“ CreateProcess error = 206,文件名或扩展名太长”的JavaExec任务
CreateProcess创建暂停进程进行DLL注入-[VC.Dll+VB.Code]