桌面软件 自动更新方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容 #Wrapper { background-color: #e2e2e2; background-image: url("/static/img/shadow_light.png"), url("//cdn.v2ex.com/assets/bgs/circuit.png"); background-repeat: repeat-x, repeat-x; } #Wrapper.Night { background-color: #1f2e3d; background-image: url("/static/img/shadow.png"), url("//cdn.v2ex.com/assets/bgs/circuit_night.png"); background-repeat: repeat-x, repeat-x; background-size: 20px 20px, 162.5px 162.5px; }
JasonTsang
V2EX    程序员

桌面软件 自动更新方案

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

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

    有些什么技术要点?

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

    谢谢各位大神。。。

    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     Solana   /span>   3061 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 12:44 PVG 20:44 LAX 05:44 JFK 08:44
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86