在考虑qt应用程序自升级的问题。
搜到了QSimpleUpdater这个库,https://github.com/alex-spataru/QSimpleUpdater
没明白其原理,主要是3个.cpp文件,现在理解如下:
Downloader: 下载器,删除旧文件,下载新文件,重命名文件;
Updater: 下载json文件,获取版本信息,下载文件地址,创建Downloader对象进行文件下载;
QSimpleUpdater: 静态类,可以创建多个Updater对象来进行多个不同文件下载;
不明白的地方:
程序运行过程中,可以删除本应用程序可执行文件?
最近编辑记录 Gentlepig (2023-03-16 17:40:17)
离线
一般更新程序下载先放在临时目录下,然后创建一个shell脚本进行程序替换并启动新程序,最后由Qt创建一个进程执行shell脚本,主程序退出。
离线
应用是加载到内存中运行的
离线
运行例程,且修改json文件为指定的网址,确实可以下载指定文件,且下载前先删除了应用程序文件,但应用仍可执行。
遇到了些问题,下载后的文件默认没有可执行权限,调用chmod +x给了权限。
qsimpleupdater代码里是通过qdesktopservices()打开下载的本地文件的,打开时报错:没有应用程序注册为处理此文件的。
182 void Downloader::openDownload()
1 {
2 if (!m_fileName.isEmpty())
3 QDesktopServices::openUrl(QUrl::fromLocalFile(m_downloadDir.filePath(m_fileName)));
4
5 else
6 {
7 QMessageBox::critical(this, tr("Error"), tr("Cannot find downloaded update!"), QMessageBox::Close);
8 }
9 }
离线
一般更新程序下载先放在临时目录下,然后创建一个shell脚本进行程序替换并启动新程序,最后由Qt创建一个进程执行shell脚本,主程序退出。
请教,这样做,相比删掉正在运行的文件然后下载新的过去,有什么优点呢?
离线
@Gentlepig
这样做可以减少出现意外情况的风险,比如说,你下载过程中出现网络问题或者意外关机(断电),至少下次开机时还能有一个可以运行的程序。
离线