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结果。 展开
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结果。 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询