创建子进程一直失败的原因

我才是心翼 2011-08-26 04:01:10
代码如下,如此创建匿名管道,然后创建子进程时候就一直失败!

我觉得原因就出在CreateProcess的第一二个参数上。我用的是VS2010

请问因为怎么修改?谢谢


SECURITY_ATTRIBUTES sa; //定义安全属性结构体
sa.bInheritHandle=TRUE; //如果为真,新的进程继承这个句柄
sa.lpSecurityDescriptor=NULL; //赋予一个默认的安全描述符
sa.nLength=sizeof(SECURITY_ATTRIBUTES); //用sizeof取得长度

if(!CreatePipe(&hRead,&hWrite,&sa,0)) //注意,由sa而写上面的结构体.注意这里用的是if(!xxx)的写法
{
MessageBox(_T("创建匿名管道失败"));
return;
}
STARTUPINFO sui; //STARTUPINFO结构体的构造
ZeroMemory(&sui,sizeof(STARTUPINFO)); //用ZeroMemory函数,将sui结构体中所有对象全部设置为0
sui.cb=sizeof(STARTUPINFO);
sui.dwFlags=STARTF_USESTDHANDLES;
sui.hStdInput=hRead;
sui.hStdOutput=hWrite; //获取读写句柄
sui.hStdError=GetStdHandle(STD_ERROR_HANDLE);

PROCESS_INFORMATION pi;

if (!CreateProcess(".\\Child.exe",NULL,NULL,NULL,TRUE,0,NULL,NULL,&sui,&pi))
{
CloseHandle(hRead);
CloseHandle(hWrite);
MessageBox("创建子进程失败");
//如下将读写句柄设置为 NULL 那么在析构函数中,就不会再关闭一次了
hRead=NULL;
hWrite=NULL;
return;
}
else
{
//关闭子进程的进程、线程对象
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
...全文
751 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoshang_program 2011-09-09
  • 打赏
  • 举报
回复
如何发布版本了 自然找不路径呀 你想想
xiaoshang_program 2011-09-09
  • 打赏
  • 举报
回复

int pathlen = ::GetCurrentDirectory(MAX_PATH,pathbuf);
_tcscat(pathbuf ,_T("\\")); //看你是否定义UNICODE了 其实这是不安全函数
_tcscat(pathbuf ,_T("A.exe"));
_tcscpy(ProgramA,pathbuf);

自己改吧

我感觉好像 路径问题

汪宁宇 2011-08-26
  • 打赏
  • 举报
回复
GetLastError ?
向立天 2011-08-26
  • 打赏
  • 举报
回复
最好用GetModuleFileName获取exe文件位置
然后解析出路径
然后在根据需要重新组合
你这样使用相对路径很危险
Eleven 2011-08-26
  • 打赏
  • 举报
回复
你最下面的else部分错误,如果CreateProcess失败,else中的CloseHandle也是失败的,因为没有创建进程成功,PROCESS_INFORMATION里的数据成员是无效的
野男孩 2011-08-26
  • 打赏
  • 举报
回复
使用相对路径,先得弄清楚当前路径是在哪。不确定的话,可以调用GetCurrentDirectory看看当前路径。
我才是心翼 2011-08-26
  • 打赏
  • 举报
回复
啊。。。用相对路径也可以了。。。和编码没关系。见鬼了。。。大半夜的。。。

if (!CreateProcess("..\\Child123.exe",NULL,NULL,NULL,TRUE,0,NULL,NULL,&sui,&pi))
{


其中..\\表示的是运行的Debug的上层
我才是心翼 2011-08-26
  • 打赏
  • 举报
回复
问题解决一半~发现CreatePrecess第一个参数用绝对路径就能成功了..

但是一旦用相对路径,无论如何都出不来,我感觉是和编码有关系了..现在设置的是多字节..但是设置为Unicode以后,那个参数的地方反而有问题。。。

郁闷了,继续求解
xiaopoy 2011-08-26
  • 打赏
  • 举报
回复
pi需要先清零啊。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧