社区
网络编程
帖子详情
程序在运行中,如何实现在线升级?
firefly3233
2012-02-08 03:45:59
如QQ游戏大厅。
运行后,弹出登录框,然后是自动升级,然后进入大厅。
1、程序运行,连到指定服务器。用socket
2、把本程序版本号发往服务器。用socket
3、服务器判断如果版本号低于某值,向客户端发升级命令。用socket
4、可程序运行了,EXE程序不能改呀。怎么进行的?
5、如何查找到升级的文件,是通过什么方式更新的?
...全文
331
19
打赏
收藏
程序在运行中,如何实现在线升级?
如QQ游戏大厅。 运行后,弹出登录框,然后是自动升级,然后进入大厅。 1、程序运行,连到指定服务器。用socket 2、把本程序版本号发往服务器。用socket 3、服务器判断如果版本号低于某值,向客户端发升级命令。用socket 4、可程序运行了,EXE程序不能改呀。怎么进行的? 5、如何查找到升级的文件,是通过什么方式更新的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
firefly3233
2012-02-12
打赏
举报
回复
我暂时用得是:
EXE的InitInstance
运行update.dll得到下载的目录
如果目录数大于0,"rundll32.exe update.dll FTPDownloadFiles myappname",并返回FLASE,关闭了主程序.
在FTPDownloadFiles里下载目录中的文件后,启动myappname.
感觉还不错.只不过update.dll本身不好升级,因为升级代码在dll里.
WillyWonka
2012-02-10
打赏
举报
回复
[Quote=引用 13 楼 firefly3233 的回复:]
不想做成Update.exe,如果做成这,用户不懂,瞎点运行.
如果是Update.dll就好了.
[/Quote]
我见过有把子程序做成.ICO的我会说么..
许文君
2012-02-10
打赏
举报
回复
明白LZ的意思了,LZ想要的是程序自删除然后替换新版本是吧
LuciferStar
2012-02-10
打赏
举报
回复
升级程序负责下载,检验文件正确性,一切准备就绪后发送消息给正在运行的程序,通知有更新,需要关闭。
待程序关闭后,执行文件覆盖操作。
如果程序不在运行,直接覆盖。
WillyWonka
2012-02-10
打赏
举报
回复
楼主可以参考网狐游戏平台的代码..消息协议里添加VerMessage版本号,版本号不对就发送客户端Updata消息,然后客户端就可以根据服务器地址开启DOWNLOAD。不是太复杂
fly4free
2012-02-10
打赏
举报
回复
[Quote=引用 13 楼 firefly3233 的回复:]
不想做成Update.exe,如果做成这,用户不懂,瞎点运行.
如果是Update.dll就好了.
[/Quote]
点了就升级呗。
或者根据 IPC 只允许指定进程 启动它。
fly4free
2012-02-09
打赏
举报
回复
[Quote=引用 8 楼 firefly3233 的回复:]
引用 7 楼 oyljerry 的回复:
2、如果不相等:执行"rundll32 update.dll 升级函数名",并返回-1,这样就本程……
[/Quote]
第2条,虽然作为服务器端维护者,没人要把旧版本替换到 服务器端 但是误操作这个东西 不容忽视。
firefly3233
2012-02-09
打赏
举报
回复
[Quote=引用 7 楼 oyljerry 的回复:]
由主程序启动的时候来调用升级程序,升级程序根本就没有任何UI。
[/Quote]
能不能这样?(程序目录下有一个update.dll)
1、程序运行,在CWinApp.InitInstance()里判断本程序版本和HTTP:\\xxx\需升级文件.exe的版本;
2、如果不相等:执行"rundll32 update.dll 升级函数名",并返回-1,这样就本程序就退出了。
3、update.dll的升级函数里:弹出个升级对话框,显示进度等,下载http:\\xxx\需升级文件.exe。,下载完成,替换本程序.exe(本程序已关闭,可以替换)。
4、重新运行本程序.exe,因为已经是最新版本,CWinApp.InitInstance()里判断本程序版本和HTTP:\\xxx\需升级文件.exe版本一致,跳过“rundll update.dll..."继续运行本程序。
firefly3233
2012-02-09
打赏
举报
回复
不想做成Update.exe,如果做成这,用户不懂,瞎点运行.
如果是Update.dll就好了.
oyljerry
2012-02-09
打赏
举报
回复
[Quote=引用 6 楼 firefly3233 的回复:]
可一般,我们都是见到一个EXE呀.如果做成两个,用于没有按你规定的顺序:先点升级程序,再点主程序.
而是先点主程序,再点升级程序呢?
[/Quote]
由主程序启动的时候来调用升级程序,升级程序根本就没有任何UI。
ystemni
2012-02-09
打赏
举报
回复
1、主程序运行。启动升级线程。
2、线程可设置X秒后运行,访问远程服务器。
3、服务器返回软件最新的版本号,主程序判断与当前程序版本号是否一致。
4、不一致的话,提示是否升级最新版本。
5、确定升级的话,运行Update.exe(一般在主程序同路径下),下载完成后,运行Update.exe
6、Update.exe有无UI均可(我自己做的一个是有UI的,显示更新内容),关闭主程序,下载最新版本主程序文件为bak,然后你先DeleteFile再rename也好,直接MoveFile也好,随便你。
xiaohuh421
2012-02-09
打赏
举报
回复
首先,楼主要去看看现在游戏客户端的做法.
升级程序和游戏主程序及模块都是分开的.也就是说,升级程序运行时,并不会运行你的主程序.
firefly3233
2012-02-09
打赏
举报
回复
那还有别的方式吗?CSocketFile?用这种方式把需升级的文件传到客户端?
firefly3233
2012-02-08
打赏
举报
回复
可一般,我们都是见到一个EXE呀.如果做成两个,用于没有按你规定的顺序:先点升级程序,再点主程序.
而是先点主程序,再点升级程序呢?
hdg3707
2012-02-08
打赏
举报
回复
[Quote=引用 4 楼 firefly3233 的回复:]
MoveFile()修改xxx.exe.bak到xxx.exe;然后启动该xxx.exe.
这个工作由谁做?线程?如果是,也是本EXE开的线程,程序正在运行中,不能修改.BAK到...
[/Quote]
象1楼主说的,单独做个升级程序.由这个升级程序来做
firefly3233
2012-02-08
打赏
举报
回复
MoveFile()修改xxx.exe.bak到xxx.exe;然后启动该xxx.exe.
这个工作由谁做?线程?如果是,也是本EXE开的线程,程序正在运行中,不能修改.BAK到...
firefly3233
2012-02-08
打赏
举报
回复
用线程下载,用什么模式下载.总不是HTTP吧?
oyljerry
2012-02-08
打赏
举报
回复
1.可以退出运行的程序,然后覆盖,再启动
2.重启以后替换文件,等于是机器下次重启才真正更新,MoveFileEx()
Eleven
2012-02-08
打赏
举报
回复
单独做个升级程序,程序里开线程检测,如果需要升级,启动升级程序升级。升级程序开始下载数据保存到本地,比如xxx.exe.bak;然后询问用户是否升级该程序,如果升级,关闭原来的程序,然后MoveFile()修改xxx.exe.bak到xxx.exe;然后启动该xxx.exe.
基于微信小
程序
原生开发从头
实现
小
程序
常见功能(基础篇)
基于微信小
程序
原生开发从头
实现
小
程序
常见功能,包括小
程序
开发基础知识及常用开发功能如登录、找回密码、文件上传、多媒体功能、编辑表单、详情界面、列表界面等,并
实现
简单的
在线
预约系统相关功能,具体内容...
Java
程序
如何自动
在线
升级
有时候我们的
程序
需要连接服务器检测新版本,如果发现新版本则需要自动下载
升级
。这种需求在Linux下还好说,但在windows下如何替换正在
运行
的
程序
文件呢? 当然有办法,步骤如下:
Bootloader
实现
升级
程序
其实就是通过上位机把.bin/hex文件以CAN通讯的方式发送给单片机并存储在规定的Flash
中
。这个过程与手机端更新APP类似。 以STM8单片机为例,该如何
实现
Bootloader呢?今天和大家分享一下。 01、什么是...
stm32的
程序
在ROM和RAM
中
是如何
运行
的/在哪里执行的?
问题:stm32
中
的Code在
程序
运行
时要不要拷贝到RAM里执行呢?还是直接从Flash
中
取
程序
指令执行? 不是nand flash不能
运行
程序
吗?难道32里用的是nor flash? cpu的本质: 处理器基本原理都相似,简单理解都是取...
Python
实现
简单自动
升级
exe
程序
版本并自动
运行
,适合Python自动化运维。
Python
实现
简单自动
升级
exe
程序
版本并自动
运行
,适合Python自动化运维。一、此教程是使用bat脚本+NFS
实现
自动更新。(也可以使用FTP或者使用html
实现
自动更新)1、编写version.ini文件2、编写update.py3、修改主
程序
...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章