Windows下程序可执行文件的替换策略

Windows下程序可执行文件的替换策略,windows,patch,auto-update,Windows,Patch,Auto Update,我有一个Windows程序,需要从服务器自动更新自己 它已经能够从服务器传输文件,并在加载DLL插件文件之前对其进行更新和验证 然而,这个程序也需要自我更新。可能有几种不同的方法可以做到这一点,我从各种在线游戏客户端看到的最明显的方法是创建一个“自动补丁程序”,下载并运行客户端可执行文件。这就带来了必须更新autopatcher的问题,因此如果有更优雅的解决方案,我想听听 我必须想象有一种方法可以将新的可执行文件下载为临时文件,比如“client.exe.tmp”,然后启动一个单独的进程,等待原

我有一个Windows程序,需要从服务器自动更新自己

它已经能够从服务器传输文件,并在加载DLL插件文件之前对其进行更新和验证

然而,这个程序也需要自我更新。可能有几种不同的方法可以做到这一点,我从各种在线游戏客户端看到的最明显的方法是创建一个“自动补丁程序”,下载并运行客户端可执行文件。这就带来了必须更新autopatcher的问题,因此如果有更优雅的解决方案,我想听听

我必须想象有一种方法可以将新的可执行文件下载为临时文件,比如“client.exe.tmp”,然后启动一个单独的进程,等待原始client.exe退出,然后在其顶部重命名/复制新文件

以前有人成功地做过这类事情吗?你用什么方法让它工作

  • 运行exe将下载新的文件,并将其放置在某个位置

  • 运行exe会将自身重命名为任何名称(如.exe.tmp)
  • 运行exe将下载的exe放在运行的exe所在的位置(与原始文件名称相同)
  • 运行exe将启动下载的exe
  • 下载的exe将检查.exe.tmp文件,如果找到,将删除该文件并终止旧的运行进程
  • 完成

  • 我喜欢修补程序/维护/功能添加/删除工具的方法。即使出于某种原因,你需要更新一些琐碎的东西,我在这里看不到“鸡或蛋悖论”,它更像是“一只手洗另一只手”的事情

  • 应用程序检查服务器是否有更新,如果有,请检查修补程序是否最新,如果需要,请检查应用程序更新修补程序
  • 补丁程序作为一个单独的进程执行,下载更新,并通知应用程序提示安装更新
  • 您同意,应用程序将退出并通知修补程序,修补程序将解压数据,替换exe,执行新版本可能需要的其他操作,然后启动并终止

  • 考虑哪一个将帮助您从共享位置插入/替换/更新最新版本并执行

    “运行exe会将自己重命名为任何东西(如.exe.tmp)”听起来有些棘手。你能在执行文件时重命名它吗?是的,你不能删除它,但你可以在它运行时重命名它。尽管如此,我想最简单的方法是让exe创建一个自己的副本,然后执行执行所有替换操作的副本。你如何摆脱正在运行的副本?从正在运行的exe启动更新的exe并让新启动的exe执行终止/删除操作会更安全一些,因为这意味着新的exe至少可以启动。在实践中,我发现这只在50%的时间内有效。通常,由于某些原因,.exe.old仍然存在,并且不会删除,因为它正在使用中(即使在正在执行的.exe关闭之后),因此当前版本无法重命名为.exe.old,并且应用程序永远不会更新。