2 lxz5200oo lxz5200oo 于 2015.07.26 18:28 提问

匿名管道子进程创建失败

我是跟着孙鑫VC教程学的,跟着他的步骤敲得代码,但是子进程总是创建失败,
if(!CreateProcess(("..\Child\Debug\Child1.exe"),NULL,NULL,NULL,
TRUE,0,NULL,NULL,&sui,&pi))
{
CloseHandle(hRead);
CloseHandle(hWrite);
hRead=NULL;
hWrite=NULL;
MessageBox("创建子进程失败!");
return;
}
else
{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
}

void CParent1View::OnPipeRead()
{
// TODO: Add your command handler code here
char buf[100];
DWORD dwRead;
if(!ReadFile(hRead,buf,100,&dwRead,NULL))
{
MessageBox("读取数据失败!");
return;
}
MessageBox(buf);

3个回答

CSDNXIAON
CSDNXIAON   2015.07.26 18:38

Windows CreateProcess fail 创建进程失败。
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

oyljerry
oyljerry   Ds   Rxr 2015.07.26 18:49

用GetLastError查看一下子进程创建失败的错误码,这才好进一步分析

oyljerry
oyljerry 回复lxz5200oo: 在你失败的API时候调用,它返回一个DWORD值
接近 3 年之前 回复
lxz5200oo
lxz5200oo 我是刚开始学的,请问怎么用GetLastError
接近 3 年之前 回复
zuishikonghuan
zuishikonghuan   2015.07.27 09:02

换成绝对路径再试一下
用GetLastError获取错误码再分析

zuishikonghuan
zuishikonghuan 回复lxz5200oo: 那就看看错误码是多少
接近 3 年之前 回复
lxz5200oo
lxz5200oo 用绝对路径也试过,程序可以运行,但是点击创建菜单项后,还是提示创建子进程失败
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Linux进程间通信——使用匿名管道
在前面,介绍了一种进程间的通信方式:使用信号,我们创建通知事件,并通过它引起响应,但传递的信息只是一个信号值。这里将介绍另一种进程间通信的方式——匿名管道,通过它进程间可以交换更多有用的数据。 一、什么是管道 如果你使用过Linux的命令,那么对于管道这个名词你一定不会感觉到陌生,因为我们通常通过符号“|"来使用管道,但是管理的真正定义是什么呢?管道是一个进程连接数据流到另一个进程的通
匿名管道实现父子进程之间的通信....
/*匿名管道: 匿名管道可以实现父子进程的通信, 一个由另一个进程调用CreateProcess函数创建的进程称为子进程 我们在利用CreatePipe创建你民管道的时候会获得管道的读写句柄  子进程可以继承这个句柄  在父进程通过  CreatePipe函数获得句柄可以对匿名管道进行读写操作 在子进程  通过GetStdHandle()通过不同的参数 可以获得标准 输入 输出 错误的
进程间通信系列(3)匿名管道范例代码
范例程序通过父进程创建两个子进程,两个子进程通过管道进行通信,实现了cat /passwd | grep root的功能。 #include #include #include #include #include char *cmd1[3] = {"/bin/cat", "/etc/passwd", NULL}; char *cmd2[3] = {"/bin/grep", "roo
Windows进程通信——匿名管道
1. 概述 匿名管道是在本地机器上使用,实现父进程和子进程之间的通信的进程通信机制。需要注意两点: (1)就是在本地机器上,这是因为匿名管道不支持跨网络之间的两个进程之间的通信 (2)实现的是父进程和子进程之间的通信,而不是任意的两个进程,因为需要继承父进程的读写管道句柄 匿名管道的作用之一是输出重定向,也就是如下面的图中所示的功能 上面红色框框中文本是在DOS窗口下输出的,
匿名管道为什么可以在父子进程间通信
网上关于匿名管道的用法已经非常多了,这里就不再过多的介绍,只关注本篇的主题.匿名管道创建函数pipe()系统调用底层的实现就相当于一个特殊的文件系统,每次调用的时候创建一个inode关联着两个file,一个用于读,一个用于写,从而实现数据的单向流动.一个管道实际上就是一个无形(只存在于内存中)的文件,对这个文件的操作要通过两个已经打开的文件进行,分别代表该管道的两端 .每个文件都是有一个inode...
匿名和命名管道(windows)
一、概述   管道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机。一个进程在向管道写入数据后,另一进程就可以从管道的另一端将其读取出来。匿名管道(Anonymous Pipes)是在父进程和子进程间单向传输数据的一种没有名字的管道,只能在本地计算机中使用,而不可用于网络间的通信。 二、匿名管道   匿名管道由CreateP
Linux c 匿名管道实例—创建两个子进程与父进程进行管道通信
利用fork创建两个子进程的框架: #include<stdio.h> #include<stdlib.h> #include<unistd.h> void main() { int id = 1; while(1) { if(fork()) { if(id>2) //循环创建两个子进程 { break; } continue; } else
Pipe,利用匿名管道实现进程间通信
管道是一种用于在进程间共享数据的机制,其实质是一段共享内存. Windows系统为这段共享的内存设计采用数据流I/0的方式来访问. 命令管道可以在任意进程间通信,通信是双向的,任意一端都可读可写,但是在同一时间只能有一端读,一端写.Note:须包含头文件 #include <windows.h>一、父进程// // 1.Create pipe // HANDLE hReadPipe; HANDL
linux中使用匿名管道实现进程间通信
管道是最基本的IPC机制,由pipe函数创建。在调用pipe函数时,会在内存中创建一个缓冲区,称为管道。这个管道有两个端,一个读端和一个写端。通过filedes参数传给用户程序的两个文件描述符,filedes[0]指向管道的读端,filedes[1]指向管道的写端。 在linux中一切皆文件,管道可以看成是一个文件,可以通过read和write函数对管道进行读写操作。进程间通信时如何通过匿名管道
进程间通信——匿名管道(也可称 异步管道)
<br />匿名管道概述<br />既然是匿名管道的话,自然,就是没有名字的管道了,还有一种管道呢,叫做命名管道,<br />命名管道的功能是很强大的,匿名管道在命名管道面前,功能那是简陋的不行的,<br />至于命名管道的话,会留到下一篇博文中介绍的,<br />匿名管道正因为提供的功能很单一,所以它所需要的系统的开销也就比命名管道小很多,<br />在本地机器上可以使用匿名管道来实现父进程和子进程之间的通信,<br />这里需要注意两点,第一就是在本地机器上,这是因为匿名管道不支持跨网络之间的两个进程之