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

2020-01-06 11:30:42 +08:00
 monkeyWie

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

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

1065 次点击
所在节点    问与答
2 条回复
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
2020-01-06 14:09:01 +08:00
@lff0305 这个 loader 有什么好的实现方法吗,从 main 进程存一个 loader 文件临时写出来吗 🤣

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/635404

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX