• 8370阅读
  • 4回复

请教下自动升级程序的思路. [复制链接]

上一主题 下一主题
离线wanwan
 
只看楼主 倒序阅读 楼主  发表于: 2010-08-13
— 本帖被 XChinux 执行加亮操作(2010-09-01) —
qt程序编译由程序文件和多个qt库组成.
先假定qt库文件不需更新,只更新程序文件.

我想,是不是应该把程序文件编译成库.而由loader去调用.
在loader启动时,先不load程序文件,而是运行更新程序来判断是否需要更新,如果需要更新的话,就下载更新文件,然后再load程序文件.
但是我不知道怎么把程序编译成库,再在loader中调用.

第二个问题是,如果更新程序本身或qt库需要更新怎么办?
离线sbtree
只看该作者 1楼 发表于: 2010-08-14
目前很多软件的升级都是通过另外的一个外部可执行文件update.exe完成的,这意味着你可以通过update下载要更新的文件,并由他去负责拷贝和更新旧的文件,如果遇到你的程序文件正在运行,还可以提示以强行关闭它。如果是要更新这个update.exe自身的话,会稍微麻烦一点,一个比较简单的做法是,在update启动的时候判断自己是不是在目标路径下,如果是就把自己拷贝到一个临时目录下,然后从临时路径重新启动,并退出之前的进程,以便新的update能够拷贝到目标路径。
windows 7 + VC++2008 + Qt4.5.2
离线wanwan
只看该作者 2楼 发表于: 2010-08-16
谢谢楼上的朋友.
我还有一点不明白,启动更新程序之后,如何能停止主程序而不停止更新程序呢.

比方说,我的主程序是app.exe,更新程序是update.exe.
我启动app.exe之后,用QProcess启动update.exe. update.exe检测到app.exe需要更新,于是就在后台下载了新版的app.exe.
但此时不能用新的app覆盖旧的,因为主程序正在运行. 但如果退出主程序,update.exe就跟着一起退出了,还是没能更新.
离线xtfllbl

只看该作者 3楼 发表于: 2010-08-16
但如果退出主程序,update.exe就跟着一起退出了,还是没能更新.

主程序退出,update仍然会执行下去,请仔细看QProcess文档说明。
上海欢迎您
离线wanwan
只看该作者 4楼 发表于: 2010-08-17
谢谢楼上的朋友,我之前使用的是QProcess::start.
查阅过文档之后发现,这个方法创建的子进程会随主进程一起退出,应该使用startDetached.
快速回复
限100 字节
 
上一个 下一个