发现有些程序,如反编译工具Reflector.exe,每次运行时,它都会检查更新,如果有更新,就下载下来把自己给更新了,就是程序自己把自己给覆盖了。我用Reflector.exe来反编Reflector.exe,没找到它是怎么做。请问有人知道这是怎么实现的吗?

解决方案 »

  1.   

    下载的文件放在一个临时文件里,
    退出时写一个bat文件用下的文件覆盖自己,
    运行bat后退出.
      

  2.   

    我的这个需求主要是应用在PDA手机上,我试了一下BAT,发现BAT在PDA上运行不了
      

  3.   

    一般是给个临时文件夹,现放到临时文件夹里。下载完了通知重新启动程序,在重新启动程序的过程中把临时文件夹的东西copy到程序目录里
    另外一种做法是程序本身使用了文件内存映射来实现,程序本身访问的就不是文件本身而是内存里副本,所以可以直接更改硬盘的东西
      

  4.   

    这是我从网上找到的,理论上可以:
    自动自我更新是很多客户端需要的功能。要点在两个:自动和自我更新。所谓自动就是定时按规则轮循是否有必要去检查更新和是否有必要更新。自我更新就是不借助另一个程序而实现自已更新自己。一般来说有几种实现方法: 1.程序self.exe启动时先把自己复制为一个临时文件self.tmp,再启动这个临时文件self.tmp并且退出自己,这时候原来那个程序self.exe就可以被任意覆盖。self.tmp来控制大局。这种方法每次都要复制一遍自身,在安装程序中比较多见,游戏中也比较多见。好处是逻辑比较简单,只要一个复制和一个覆盖就行了。缺点是每次要复制一遍,影响启动性能,并且大多数情况下是浪费的,而且别人看进程的时候一个奇怪的临时文件,可能被误杀。 2.程序self.exe检查更新,如果有更新之后,下载为一个update_self.exe,并且启动update_self.exe 加上参数CopyTo self.exe,同时自己退出。 update_self.exe接到参数CopyTo后,执行复制,可能要重试几次才会成功,成功后运行self.exe 加上参数UpdateVersi