3 天来我一直在寻找一个好的解决方案,但到目前为止我还没有找到任何解决方案。我的情况是:
客户端安装了应用程序(C++,控制台应用程序)。启动时的应用程序将与服务器检查它的版本号并返回或者它是最新的或者它应该下载一个新版本。
如果一定要下载新版本,我想下载新的脚本,用curl命名为:Application2.exe
但是,我希望它替换触发新版本下载的旧 Application.exe。
我的解决方案是:Application.exe 下载 Application2.exe。下载后,它应该触发 Updater.exe,它会休眠 5 秒。在这 5 秒内(或任何最合适的时间跨度)。在这 5 秒内,Application.exe 有时间关闭,5 秒后 Updater.exe 将 Application.exe 替换为 Application2 .exe.
现在更新已经完成,客户端已经安装了最新版本。
对于系统锁定文件等,此解决方案是否可行?
最佳答案
好消息,您可以重命名在 Windows 上打开的文件(可执行文件和 DLL)。该锁可防止您删除文件,而不是重命名它们。
- 将当前运行的程序重命名为
Application_old.exe
在运行时 - 将下载的程序写入
Application.exe
- 运行新的
Application.exe
- 关闭旧的。
- 使用新执行的程序删除旧版本。
这样,您将在更新后自动重启。我自己一直这样做。
关于C++自动更新到新版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42998532/