如何实现系统的在线升级功能?? 急急急

mustbelove 2004-12-14 12:07:03
我用vb写了个简单的应用程序,已经打包成为了exe文件,在系统中想实现自动升级,原来没有做过,请各位高手指点迷津:)多谢。
...全文
224 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mustbelove 2004-12-20
  • 打赏
  • 举报
回复
谢谢。
techgopher 2004-12-20
  • 打赏
  • 举报
回复
To kmzs: 你倒是直接替换一个正在运行或者已经装载的文件看看?

To mustbelove:

我就把伪代码写详细点了,具体API用法网上多的是,自己找吧。

假设可执行文件名为old.exe

if App.ExeName = "new" then '当前可执行文件为new.exe
从命令行或者用enumprocesses API获得old.exe的进程id
用OpenProcess API根据进程id获得进程句柄
if 句柄不为0 then
用WaitForSingleObject等候old.exe进程结束一段时间(可选)
if WaitForSingleObject 返回timeout then
用TerminateProcess杀掉old.exe进程
end if
end if '至此,old.exe进程应该已经终结,old.exe文件可读写

复制new.exe到old.exe
用CreateProcess API运行old.exe并马上返回,退出
elseif 有新的版本 then '当前可执行文件为old.exe
下载新版本到临时文件new.exe
用GetCurrentProcessID API获得当前进程ID
用CreateProcess API运行命令行"new.exe /o:当前进程ID"并马上返回,退出
else
删除new.exe
end if

个人经验用Shell函数运行程序有时不能立即返回,导致不得不用TerminateProcess来非正常终结进程。如果用CreateProcess API就不存在这个问题。
kmzs 2004-12-19
  • 打赏
  • 举报
回复
判断修改日期,替换掉就行了!
mustbelove 2004-12-19
  • 打赏
  • 举报
回复
要做的精确的话,可以在运行new.exe时把当前old.exe的进程id传入为命令行参数,然后在"new.exe"运行的语句里用OpenProcess, WaitForSingleObject, TerminateProcess等等API来监控old.exe的进程。

还能详细点吗?谢谢。
techgopher 2004-12-16
  • 打赏
  • 举报
回复
用Exe一样可以自动升级。
思路:假设可执行文件名为old.exe

if App.ExeName = "new" then
复制new.exe到old.exe
运行old.exe并马上返回,退出
elseif 有新的版本 then
下载新版本到临时文件new.exe
运行new.exe并马上返回,退出
end if

要做的精确的话,可以在运行new.exe时把当前old.exe的进程id传入为命令行参数,然后在"new.exe"运行的语句里用OpenProcess, WaitForSingleObject, TerminateProcess等等API来监控old.exe的进程。
blackbug119 2004-12-14
  • 打赏
  • 举报
回复
用DLL,在用WINSOCK写一个网络传输文件,看DLL的版本和服务器上的是否一样,不一样就删除原有的DLL在下载一个新的
mingday 2004-12-14
  • 打赏
  • 举报
回复
单独一个exe怎么升呀,考虑用dll
mustbelove 2004-12-14
  • 打赏
  • 举报
回复
我在程序中只是用到了几个dll文件里面的函数,这些都是windows提供的,可是我自己写的程序是不是也要放到dll中才能实现在线升级呢?

2,506

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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