2011-08-26 100 views
4

我有一个需要自动从服务器更新自身的Windows程序。在Windows中替换程序可执行文件的策略

它已经能够从服务器传输文件并在加载之前更新+验证诸如DLL插件文件之类的东西。

但是,这个程序也需要自行更新。可能有几种不同的方法可以完成,而我从各种网络游戏客户端看到的最明显的方法是创建一个“自动修补程序”,用于下载并运行客户端可执行文件。这引入了必须更新autopatcher的问题,所以如果有更优雅的解决方案,我想知道它。

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

有没有人在成功之前完成过这样的事情,以及您使用了什么方法来实现它?

回答

8
  1. 运行exe文件下载新的一个,把它的地方
  2. 运行exe文件重命名自己任何东西(像.exe.tmp)
  3. 运行exe文件把下载的EXE在运行一个(名为就像原)
  4. 运行exe文件开始下载的EXE
  5. 为.exe.tmp文件下载的EXE检查,若发现其删除,并杀死旧正在运行的进程
  6. 完成
+2

“运行exe文件重命名自己什么(像.exe.tmp)“听起来有些棘手。你可以在执行文件时重命名文件吗? – pezcode

+1

是的,你不能删除它,但你可以在运行时重命名它。 – Maxem

+1

这就是说,我猜最简单的方法是为exe创建自己的副本,然后执行所有替换的副本。 – pezcode

1

我喜欢修补程序/维护/功能添加/删除工具的方法。即使出于某种原因,你需要更新一些微不足道的东西,但是我并没有在这里看到“鸡或鸡蛋悖论”,而更像是“一方面洗了另一方”。更新

  1. 应用检查服务器,如果有的话,检查是否修补器是最新的,如果需要的话,应用程序更新修补
  2. 修补程式被作为一个单独的处理中执行,下载更新,并通知应用程序提示安装
  3. 您同意,申请退出通知该修补,修补解压缩数据,取代exe文件,做更多的东西,可以通过新版本的需要,并启动它,并终止
相关问题