V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
JasonTsang
V2EX  ›  程序员

桌面软件 自动更新方案

  •  
  •   JasonTsang · 2018-10-16 02:44:09 +08:00 · 5126 次点击
    这是一个创建于 1990 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我看到很多桌面软件 都是自动更新,请问一下,整个流程是怎么样的呢?

    有些什么技术要点?

    能说说现在最常用的软件升级方案 的思路么??

    谢谢各位大神。。。

    12 条回复    2018-10-16 18:44:41 +08:00
    warlue
        1
    warlue  
       2018-10-16 04:38:13 +08:00 via iPhone
    启动检查服务器上版本,有更新就自动下载静默安装。。
    xuanbg
        2
    xuanbg  
       2018-10-16 08:44:07 +08:00
    自动更新很简单的
    1、读取本地文件版本号
    2、读取服务端文件版本号
    3、比较版本,如果本地低于服务端,就下载该文件替换本地文件,如果文件替换失败,将本地文件改名,然后保存文件
    4、升级完成
    vx2018
        3
    vx2018  
       2018-10-16 09:21:34 +08:00
    @xuanbg 3 也可以下载最新安装程序, 安装程序启动时通知主程序退出, 然后安装
    gamexg
        4
    gamexg  
       2018-10-16 09:33:18 +08:00   ❤️ 1
    还见过服务器下发所有文件 hash 值,客户端计算比较,发现不一致的就下载替换...
    tilv37
        5
    tilv37  
       2018-10-16 10:12:04 +08:00   ❤️ 1
    写个专用的升级工具,然后随主程序启动,检查服务端版本信息,比对,然后下载更新
    JasonTsang
        6
    JasonTsang  
    OP
       2018-10-16 11:36:55 +08:00
    @xuanbg 这个流程我知道,我是想知道,怎么比对文件的差异,替换这些我应该还是懂的

    因为一次修改后  可能会修改很多文件 和 删除某些文件
    lancerliu
        7
    lancerliu  
       2018-10-16 11:47:41 +08:00
    多种方案,比如:1.服务器端有需要更新的文件列表 2.服务器端下发所有文件的 hash
    imn1
        8
    imn1  
       2018-10-16 12:04:32 +08:00
    你想全自动,需要装在用户目录,不然会触发权限
    xujinkai
        9
    xujinkai  
       2018-10-16 12:18:58 +08:00 via Android
    如果仅限 win10 的话 传到应用商店 微软帮你更新
    qecxp
        10
    qecxp  
       2018-10-16 12:41:11 +08:00   ❤️ 2
    自动更新方案实现起来其实很复杂。

    1.windows vista 之后有更多的权限控制,比如 C:\Program Files 软件安装目录,通常是没有权限替换文件的。如果要升级替换,可能会弹出 UAC 提示用户,而用户可能点了不允许你替换文件,导致升级失败。如果把程序安装在低权限目录,是可以替换文件的而不会弹 UAC 提示用户。
    2.如果程序有多个模块,你升级了 A 模块,如果 A 模块与其他模块有依赖关系,需要充分测试。假如升级的版本很多,模块很多,这种依赖关系指数增长,存在很多风险。
    3.你升级的时候是不是需要当前运行的程序退出?假如你升级到一半用户又运行程序,有不可预知的问题。假如你的程序退出了,那谁来启动你的升级程序进行升级呢,是否再写一个后台服务来升级?
    4.需要考虑升级失败回滚机制
    jinhan13789991
        11
    jinhan13789991  
       2018-10-16 13:46:40 +08:00
    下载好新的安装包,提示安装~,点击就打开安装程序~
    iwtbauh
        12
    iwtbauh  
       2018-10-16 18:44:41 +08:00 via Android
    丢给包管理器解决

    不要重复发明轮子
    不要重复发明轮子
    不要重复发明轮子

    windows 的话 msys2 了解一下,用户加上 msys2 源,导入公钥,然后各种麻烦的问题都由包管理器处理了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3381 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 11:19 · PVG 19:19 · LAX 04:19 · JFK 07:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.