VC 对话框程序怎么调用一个控制台程序,然后这个控制台程序关闭原来的对话框程序,在开一个新的对话框程

如题,其实就是一个更新的功能,a.exe(对话框)调用b.exe(控制台),b.exe去关闭a.exe,b.exe再启动c.exe... 如题,其实就是一个更新的功能,a.exe(对话框)调用b.exe(控制台),b.exe去关闭a.exe,b.exe再启动c.exe 展开
 我来答
空雪梦见
2013-09-05 · TA获得超过5597个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1179万
展开全部
按照你说的方法:
a.exe调用GetCurrentProcess获取当前进程的句柄,然后DuplicateHandle把伪句柄转成真句柄,然后SetHandleInformation使它可以被继承(为的是b.exe可以成功关闭a.exe)。之后CreateProcess启动b.exe,继承句柄那个参数记得要TRUE,命令行参数可以把刚刚说的那个真句柄传进去。然后b.exe从命令行参数获取到句柄,调用TerminateProcess强制关闭这个进程,然后CloseHandle关闭句柄。随后b.exe调用CreateProcess启动c.exe,启动后b.exe退出。

问题在于TerminateProcess对于进程的正常结束很不好,如果程序中有什么东西没保存啊啥的就都没了。

我想的另一个方法:
a.exe不是把自己的句柄传给b.exe而是创建一个互斥体(CreateMutex),然后设置为可继承,之后获取互斥体(WaitForSingleObject),然后创建b.exe,之后b.exe在这个互斥体上等待,a.exe自己主动退出(而不是由b.exe去结束)。一旦a.exe退出,b那边的WaitForSingleObject就会返回abandoned,然后b.exe关闭互斥体对象,CreateProcess去开c.exe

总之你需要弄清楚这些继承机制啊啥的,这种方法比直接枚举进程然后根据进程名打开进程再去关闭什么什么的可靠多了,避免了打开进程会失败的情况,而且因为b是a的子进程,还是用CreateProcess创建的,那么也最大限度避免了a无法成功打开b进程的问题。句柄都是靠继承的方式传递的,避免了对象打开失败的问题
任明星Ming
2013-09-05 · TA获得超过798个赞
知道小有建树答主
回答量:1061
采纳率:100%
帮助的人:1141万
展开全部
输入exe的绝对路径可以打开窗口。
使用CMD命令:Taskkill,可以杀掉exe的进程。
你可以试试这两个命令先。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式