在Windows下,一个EXE文件在运行的时候是被系统锁定的,在其运行期间是不能对其修改的,也不能被覆盖。因此,直接从网上下载一个新版本文件覆盖旧版本文件是行不通的。  
       既然不能在运行的时候覆盖自身,那就只有先停止需要升级的程序,由别的程序来为它升级。你可以回想一下金山霸或者其他的网上升级程序,它不是在主程序升级,而是有一个辅助升级程序。  
       举例来说,程序A需要升级到新版的A',但在A运行的时候A'不能覆盖A,这时A必须停止,而由B来从网上下载A',从而覆盖A。将这个过程联起来就是:1)A启动B,2)A停止运行,3)B下载A',4)B启动A',5)B停止运行。这样就运行了A',即新版的A。这里,可以将A看成主程序,而将B看成辅助升级程序。  
       实现B的升级同样道理,不同的是升级程序换成了A。  
       .net提供的WebHttpRequest和WebHttpResponse可以使你很容易的实现下载新包的工作。当然,你还必须做一些工作来判断计算机上的版本是否最新版本。  
 
---------------------------------------------------------------  
 
System.Diagnostics.FileVersionInfo  
版本信息不用保存  
---------------------------------------------------------------  
 
一般意义上的方法,我同意dy_2000_abc(芝麻开门)写的观点.这里我要说一些其他的.    
比如,一个升级程序如何升级它自己?  
这就是另外一种方法.一个程序并非完全不可以覆盖自己的exe,或者是正在使用的dll.  用API  MoveFileEx可以实现,但是需要重新启动计算机.  
 
这个API请参考:  
http://expert.csdn.net/Expert/topic/1033/1033739.xml?temp=.1206934  
 
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/movefileex.asp  
 
对于其中定义的常量,在Winbase.h文件中有.  
 
>>WebHttpRequest和WebHttpResponse好象会受Http协议的限制  
不太理解,相对来说Http的协议还是比较广泛的.  
当然,你也可以实现Ftp,可能你在服务器端的可行操作会多,对于大的文件,支持断点续传.  Ftp的一个例子,参考这个简单的例子.  
http://www.codeproject.com/csharp/FTP.asp
Posted on 2005-11-07 08:53  miqier  阅读(1197)  评论(1编辑  收藏  举报