ShellExecute能调用的.exe文件为何用CreateProcess不能正常调用? 20

(1)用ShellExecute实现的程序代码如下:ShellExecute(NULL,"open","pfnt.exe","D:\\1204D.dat","D:\\ps... (1)用ShellExecute实现的程序代码如下:
ShellExecute(NULL,"open","pfnt.exe","D:\\1204D.dat","D:\\psap32\\bin\\",SW_SHOW);
其含义是调用位于目录“D:\\psap32\\bin\\”下的子进程(可执行文件)“pfnt.exe”,并向其输入参数“D:\\1204D.dat”。也就是说用应用程序pfnt.exe处理文件“D:\\1204D.dat”。
以上程序语句可正常运行。

(2)但是改用CreateProcess方法仅能使pfnt.exe运行,却无法实现其对1204D.dat的处理,程序代码如下:
SECURITY_ATTRIBUTES sa;
sa.bInheritHandle=TRUE;
sa.lpSecurityDescriptor=NULL;
sa.nLength=sizeof(SECURITY_ATTRIBUTES);
if(!CreatePipe(&hRead,&hWrite,&sa,0))
{
MessageBox("创建匿名管道失败!");
return;
}

STARTUPINFO sui;
PROCESS_INFORMATION pi;
ZeroMemory(&sui,sizeof(STARTUPINFO));
sui.cb=sizeof(STARTUPINFO);
sui.dwFlags=STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
sui.hStdInput=hRead;
sui.hStdOutput=hWrite;
sui.wShowWindow=SW_SHOW;
char *ZW="D:\\psap32\\bin\\pfnt.exe";
char *szCommandLine=" D:\\1204D.dat";
if(!CreateProcess(ZW,szCommandLine,NULL,NULL,TRUE,0,NULL,NULL,&sui,&pi))
{
CloseHandle(hRead);
CloseHandle(hWrite);
hRead=NULL;
hWrite=NULL;
MessageBox("创建子进程失败!");
return;
}

请高手指点迷津。
之所以用第(2)种方法是因为想用匿名管道读取pfnt.exe处理1204D.dat文件后在DOS界面上反馈的结果。用(1)只能执行处理过程却无法读取DOS结果。
展开
 我来答
38051697
2012-04-05 · TA获得超过6497个赞
知道大有可为答主
回答量:1万
采纳率:0%
帮助的人:6137万
展开全部
谢谢 好简单阿,你的ShellExecute的最后的参数改为SW_HiDE(注意大写的i,我这里打不了) ,jIdozd
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式