C++二进制文件如何取代自己?

The*_*Saw 28 c++ file launcher

我之前在更一般的设计背景下问过这个问题.现在,我想谈谈具体细节.

想象一下,我已经app.exe跑了.它下载update.exe到同一个文件夹中.怎么会app.exe复制update.exe内容app.exe?我在C++上下文中特别要求.我需要某种第三个中介应用程序吗?我需要担心文件锁定吗?什么是二进制更新本身最强大的方法(除非有令人讨厌的IT员工拥有极端的文件权限)?理想情况下,我希望看到可移植解决方案(Linux + OSX),但Windows是主要目标.

nab*_*lke 42

  1. 将您的跑步移动/重命名app.exeapp_old.exe
  2. 移动/重命名下载update.exeapp.exe
  3. 下次启动应用程序时,将使用更新

在Windows下重命名正在运行的ie锁定的dll/exe不是问题.


Mar*_*ett 9

这是一个操作系统功能 - 而不是C++.
你在用什么操作系统?

在Windows中看到MoveFileEx()函数,在linux上只是覆盖正在运行的应用程序(在linux中替换正在运行的可执行文件)


Max*_*kin 9

在Linux上,可以删除正在运行的程序的可执行文件,因此:

  • 下载 app.exe~
  • 删除正在运行 app.exe
  • 重命名app.exe~app.exe

在Windows上,无法删除正在运行的程序的可执行文件,但可以重命名它:

  • 下载 app.exe~
  • 重命名运行app.exeapp.exe.old
  • 重命名app.exe~app.exe
  • 重新启动时删除 app.exe.old