关于网友提出的“ Delphi中如何替换运行之中的文件实现程序的自动更新”问题疑问,本网通过在网上对“ Delphi中如何替换运行之中的文件实现程序的自动更新”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: Delphi中如何替换运行之中的文件实现程序的自动更新
描述: 各位朋友:
最近在开发一个自动更新的程序,其主要原理是:当主程序启动后,其软件升级子模块自动从网上下载主程序(.exe)和与之相关的DLL等文件到本机的一个临时目录。然后在比较正运行的主程序和DLL等文件与临时目录中的文件是否需要替。如果需要,用临时目录中的文件替换原有文件。
其中我已经实现了下载、比较等功能。但是如何替换正在运行中的主程序和DLL文件时却遇到了技术困难。为了解决这个难点我设计了一个方案即:利用Windows API 中的MoveFileWithProgressW来实现。但是,我发现在用Delphi开发的主程序中能实现更新,但是用PB开发的文件却出了“文件访问拒绝”或“有其它进程使用,不能移动”错误。
特向各位朋友寻求技术支持:
1、MoveFileWithProgressW在Delphi中的详细用法
2、各位是否有更佳的方法来实现自动升级
解决方案1: 可以参考某些杀毒软件,下载一个升级包,下载完自动运行升级包,升级包运行的时候把主程序关掉,更新就是了。本人做过一个,可以两年一般都问题都能解决。有需要给参考一下。QQ:37084189
解决方案2: 最近在开发一个自动更新的程序,其主要原理是:当主程序启动后,其软件升级子模块自动从网上下载主程序(.exe)和与之相关的DLL等文件到本机的一个临时目录。然后在比较正运行的主程序和DLL等文件与临时目录中的文件是否需要替。如果需要,用临时目录中的文件替换原有文件。
===========
这样做下载量是不是太大.一般先下载一个更新说明文件(带有更新文件名和版本号,文本或者XML),在本地比较之后再决定下载什么文件,然后才是替换.
替换一般的东西,可以关闭正在运行的程序,然后复制过去.如果是24*7的程序,就需要更复杂的方式,一下子也说不清楚了.
解决方案3: 主进程启动后,自动启动UPDATE.EXE,
UPDATE.EXE负责下载更新文件,关闭主程序,更新文件。
UPDATE.EXE的行为应根据从服务器下载的更新脚本执行,这样就可以在其他项目中重用。
解决方案4: 替换本身,我一般是使用另外一个进程,关闭当前进程,更新后,重新启动进程
替换运行中的本身还没试过!
以上介绍了“ Delphi中如何替换运行之中的文件实现程序的自动更新”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3585023.html