1,假设软件更新的方式是简单的文件复制(覆盖),那么进程还未关闭的情况下,新版本的文件应该无法覆盖旧版本的文件。如何解决这一问题?
2,假设软件更新的方式不止有简单的文件覆盖,那么有哪些更优雅的方式?
(本人菜请轻喷)
实现一个update组件呗,单独的进程,启动时先kill主进程,再覆盖(...),然后退出update时启动主进程(现在软件都这么搞的好嘛)
楼上的说的很对,先杀进程,更新后,再起动进程 可参考:https://blog.csdn.net/weixin_38739598/article/details/108216486
假设你原来程序为A,做成两个程序,小a是新的启动程序,在启动器检查是否要更新程序,需要更新就更新。更新后启动A程序,小a退出。
A程序运行中需要更新,就先将需要替换的文件写成带有更新字样的文件如 update-controller.dll,先存放一边,都下载好所有更新文件,启动小A
退出当前程序执行前面的更新检查。
如果想运行时更新,需要对程序解耦,以模块方式加载运行,像控制类功能都放到controller.dll中,类似驱动加载一样load module进行加载运行,需要更新停止相关组件工作,卸载dll,然后替换后再此加载。
linux 不是.dll, 是.so,但原理一样。