使用CreateProcess()和WaitforSingleObject()调用外部exe程序问题

liweisdut 2010-06-23 09:50:33
http://topic.csdn.net/u/20100621/14/f627a36c-b7df-4108-b759-679b96dc926f.html

与上网址问题同样,为什么我用了CreateProcess()和WaitforSingleObject()之后,出现打开的exe程序出现2个,一个在

下,一个在上,经测试实际上应该是一个,这是为什么呢?
...全文
352 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
jenf 2010-06-24
  • 打赏
  • 举报
回复
可以用process monitor跟踪下,为什么会创建两个窗口?
liweisdut 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 visualeleven 的回复:]
C/C++ code

TCHAR szApp[MAX_PATH] = _T("cmd.exe");

PROCESS_INFORMATION pi={0};
STARTUPINFO si = {sizeof(si)};

BOOL fRet=CreateProcess(NULL,szApp,NULL,FALSE,NULL,NULL,NULL,NULL,&……
[/Quote]
打开cmd窗口正常,但换成外部应用程序就不行了,会不会是那应用程序本身的问题?
jenf 2010-06-23
  • 打赏
  • 举报
回复
“两个同样的界面实际上是一个”是什么意思?
是两个进程么?进程ID相同么?
liweisdut 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 visualeleven 的回复:]
C/C++ code

TCHAR szApp[MAX_PATH] = _T("cmd.exe");

PROCESS_INFORMATION pi={0};
STARTUPINFO si = {sizeof(si)};

BOOL fRet=CreateProcess(NULL,szApp,NULL,FALSE,NULL,NULL,NULL,NULL,&……
[/Quote]换成那个路径就出现2个同样的界面,实际上是一个……
Eleven 2010-06-23
  • 打赏
  • 举报
回复

TCHAR szApp[MAX_PATH] = _T("cmd.exe");

PROCESS_INFORMATION pi={0};
STARTUPINFO si = {sizeof(si)};

BOOL fRet=CreateProcess(NULL,szApp,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);
if(fRet == TRUE)
{
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}

这段代码只是启动cmd窗口,不是调用你的外部程序,OK,如果要启动外部程序,
把TCHAR szApp[MAX_PATH] = _T("cmd.exe");中的"cmd.exe"换成你的外部程序的路径
liweisdut 2010-06-23
  • 打赏
  • 举报
回复
我实在按钮处理消息中进行的,原始代码如下:
C***Dlg::OnBtn**()
{
//更新状态栏
PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&si,0,sizeof(si));
si.cb=sizeof(si);
si.wShowWindow=SW_SHOW;
si.dwFlags=STARTF_USESHOWWINDOW
BOOL fRet=CreateProcess(strPath,NULL,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);
if(fRet == TRUE)
{
WaitForSingleObject(pi.hProcess,INFINITE);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}
//更新状态栏
}
中间蓝色部分代码,更改后为:
TCHAR szApp[MAX_PATH] = _T("cmd.exe");

PROCESS_INFORMATION pi={0};
STARTUPINFO si = {sizeof(si)};

BOOL fRet=CreateProcess(NULL,szApp,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);
if(fRet == TRUE)
{
WaitForSingleObject(pi.hProcess,INFINITE);
//...
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}
调用的程序没有显示
Eleven 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liweisdut 的回复:]
引用 1 楼 stonewater 的回复:
贴代码,估计CreateProcess相关代码你运行了两次

应该不是运行了两次,因为我关闭调用的那个应用程序后,两个都没有了
[/Quote]
启动外部进程的完整代码。。。
liweisdut 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 stonewater 的回复:]
贴代码,估计CreateProcess相关代码你运行了两次
[/Quote]
应该不是运行了两次,因为我关闭调用的那个应用程序后,两个都没有了
liweisdut 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 visualeleven 的回复:]
C/C++ code

TCHAR szApp[MAX_PATH] = _T("cmd.exe");

PROCESS_INFORMATION pi={0};
STARTUPINFO si = {sizeof(si)};

BOOL fRet=CreateProcess(NULL,szApp,NULL,FALSE,NULL,NULL,NULL,NULL……
[/Quote]
这样改过之后,exe程序没有执行,大概是没有找到路径
Eleven 2010-06-23
  • 打赏
  • 举报
回复

TCHAR szApp[MAX_PATH] = _T("cmd.exe");

PROCESS_INFORMATION pi={0};
STARTUPINFO si = {sizeof(si)};

BOOL fRet=CreateProcess(NULL,szApp,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);
if(fRet == TRUE)
{
WaitForSingleObject(pi.hProcess,INFINITE);
//...
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}
liweisdut 2010-06-23
  • 打赏
  • 举报
回复
上面的代码有什么问题吗?请教……
liweisdut 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 stonewater 的回复:]
贴代码,估计CreateProcess相关代码你运行了两次
[/Quote]
PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&si,0,sizeof(si));
si.cb=sizeof(si);
si.wShowWindow=SW_SHOW;
si.dwFlags=STARTF_USESHOWWINDOW
BOOL fRet=CreateProcess(strPath,NULL,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);
if(fRet == TRUE)
{
WaitForSingleObject(pi.hProcess,INFINITE);
}
stonewater 2010-06-23
  • 打赏
  • 举报
回复
贴代码,估计CreateProcess相关代码你运行了两次
liweisdut 2010-06-23
  • 打赏
  • 举报
回复
自己顶一下
liweisdut 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 liweisdut 的回复:]
引用 14 楼 jenf 的回复:
就是说有两个窗口了?

看上去是两个的
[/Quote]
但是实际上只创建了一个进程
liweisdut 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 jenf 的回复:]
就是说有两个窗口了?
[/Quote]
看上去是两个的
jenf 2010-06-23
  • 打赏
  • 举报
回复
就是说有两个窗口了?
liweisdut 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jenf 的回复:]
“两个同样的界面实际上是一个”是什么意思?
是两个进程么?进程ID相同么?
[/Quote]
下面的不可操作,而且我关闭上面的界面时,两个通时消失,应该是窗口刷新问题,或着窗口太大。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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