分享

Delphi中如何替换运行之中的文件实现程序的自动更新

 quasiceo 2014-07-30
各位朋友:
    最近在开发一个自动更新的程序,其主要原理是:当主程序启动后,其软件升级子模块自动从网上下载主程序(.exe)和与之相关的DLL等文件到本机的一个临时目录。然后在比较正运行的主程序和DLL等文件与临时目录中的文件是否需要替。如果需要,用临时目录中的文件替换原有文件。
  其中我已经实现了下载、比较等功能。但是如何替换正在运行中的主程序和DLL文件时却遇到了技术困难。为了解决这个难点我设计了一个方案即:利用Windows API 中的MoveFileWithProgressW来实现。但是,我发现在用Delphi开发的主程序中能实现更新,但是用PB开发的文件却出了“文件访问拒绝”或“有其它进程使用,不能移动”错误。
  特向各位朋友寻求技术支持:
1、MoveFileWithProgressW在Delphi中的详细用法
2、各位是否有更佳的方法来实现自动升级

主进程启动后,自动启动UPDATE.EXE,
UPDATE.EXE负责下载更新文件,关闭主程序,更新文件。

UPDATE.EXE的行为应根据从服务器下载的更新脚本执行,这样就可以在其他项目中重用。

这样做下载量是不是太大.一般先下载一个更新说明文件(带有更新文件名和版本号,文本或者XML),在本地比较之后再决定下载什么文件,然后才是替换.

替换一般的东西,可以关闭正在运行的程序,然后复制过去.如果是24*7的程序,就需要更复杂的方式,

可以参考某些杀毒软件,下载一个升级包,下载完自动运行升级包,升级包运行的时候把主程序关掉,更新就是了。

谢谢各位同行的积极参与,我在网上查询了有关自动更新的一些技术和资料。总的来说大多并只是简单的利用FTP、TCP/IP实现网络的传输。我根据客户网络以及软件开发工程师的要求,重新设计了一个通用自动更新软件。
  在通用自动更新系统中,第三方开发的软件代码中加载一个DLL(自动升级客户端)文件,在服务器软件上进行相应的配置,就可以轻松实现对此软件的自动更新功能。
  在此系统中,对服务端硬件没有任何要求。为满足超大网络客户端(500台PC以上),服务端软件可能根据网络负载随时增减。
  经过测试此系统已能支持VC、VB、DELPHI、PB(6~9)、.NET(2003)开发的软件中实现自动更新功能。
  单台服务端压力测试支持200客户端PC、20MB同时在线升级。

 


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多