关于ShellExecute的控制权

jerry_nf 2009-01-16 04:11:13
我要做一个自动更新的功能,c++/MFC程序。

大概是点击一个按钮,程序自动到预先设定好的服务器上下载,然后运行该安装程序。见下面代码

// 下载文件
....
// 更新
CString filename = _T("c:\\temp\\Setup.exe"); // 下载的文件放在这里。
ShellExecute(NULL, "open", filename, NULL, NULL, SW_SHOWNORMAL);

// OnOK(); 退出本程序

但是,我发现,程序在等ShellExecute的执行完毕。这样,在本程序退出前,安装程序已经结束了,从而没能覆盖掉现在的这个exe文件(新的exe肯定和现在的exe同名)。
更新没能成功。

请问,怎么样可以让打开setup后,本程序依然执行,这样就可以很快退出本程序,而安装程序才可以用新的exe覆盖掉原来的exe 文件?
...全文
123 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Allen_zhang 2009-01-20
  • 打赏
  • 举报
回复
在你的升级程序中判断主进程是否退出,如果还没有退出的话等待。

ShellExecute是异步的,执行完就返回了。
xiaoxiao555 2009-01-20
  • 打赏
  • 举报
回复
本人愚见:
可以再ShellExecute开启的程序中添加判断查找当前系统的进程,
(此时的调用函数已经返回,至于调用结果可以用GetLastError()捕获)
1. 要被替换的程序已经启动,给出提示“更新程序必须重新启动该软件”;
2. 没启动,直接替换掉。

如何查找系统进程网上有好多代码。
xxweilw 2009-01-19
  • 打赏
  • 举报
回复
ShellExecute调用是异步的,可以先关闭你的应用程序呀
jerry_nf 2009-01-19
  • 打赏
  • 举报
回复
大概过程是这样的。

1,用户点击按钮
2,下载安装程序到本地硬盘
3,执行安装程序

问题是,指向安装程序需要覆盖正在执行的程序。这样其实是要本程序结束于安装程序之前。

但似乎,我用1楼里面的代码不能达到效果,程序会把控制权交给ShellExecute,等返回,然后才关闭掉自己(也就是OnOK.)

有什么办法,可以让本程序先结束?
jerry_nf 2009-01-19
  • 打赏
  • 举报
回复
如果先关闭我的应用程序,怎么才可以调用到升级程序?

调用升级程序是写在button click里面的。

我现在需要 ShellExecute调用的同时,button click里面的程度继续走完,而且要比ShellExecute结束得早。
xianyuxiaoqiang 2009-01-16
  • 打赏
  • 举报
回复
云里雾里。帮顶。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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