V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
monkeyWie
V2EX  ›  问与答

客户端软件一般是通过什么方式来实现在线升级的?

  •  
  •   monkeyWie · 2020-01-06 11:30:42 +08:00 · 993 次点击
    这是一个创建于 1572 天前的主题,其中的信息可能已经有所发展或是发生改变。

    据我了解有父子进程模式,升级完将子进程程序文件替换,然后再由父进程关闭旧的子进程并再运行刚刚替换的子进程文件,也就是说父进程只是一个壳,所有的逻辑都是在子进程上实现。

    不知道除了这种方式还有没有什么方式可以实现,比如单进程下的在线升级是否可行?

    lff0305
        1
    lff0305  
       2020-01-06 12:46:31 +08:00
    可行也是你说的那种况的变种,因为这个进程已经在运行,那么必须退出才能对其覆盖( Win 上,可能 Linux 更简单),总之需要一个 loader/wrapper 这类东西。这个 loader 可能是持久的,也可能是发现有升级包之后临时释放的(升级后自动删掉)。比如下面的过程:
    1. main.exe 发现网上有升级包,下载;
    2. 释放一个临时的 loader 并运行 (设置 loader 进程的父进程为 null,防止 main 退出 loader 也退出)。main.exe 退出
    3. loader 等待 main.exe 退出
    4. loader 用下载的升级包 升级
    5. loader fork 新的 main.exe 进程 (设置新的 main.exe 进程的父进程为 null,防止 loader 退出 main 也退出)
    6. loader 退出。
    monkeyWie
        2
    monkeyWie  
    OP
       2020-01-06 14:09:01 +08:00
    @lff0305 这个 loader 有什么好的实现方法吗,从 main 进程存一个 loader 文件临时写出来吗 🤣
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5379 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 07:05 · PVG 15:05 · LAX 00:05 · JFK 03:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.