2023年11月26日发(作者:)

Delphi实现软件⾃动升级的功能

Delphi 实现软件⾃动升级的功能

原理简单,在FTP上维护⼀个⽂件,⾥⾯记录着要更新⽂件的版本号,本地也有⼀个⽂件,每次启动更

新程序时,先从FTP上下载⽂件到本地名字为Update_,然后⽐较这两个⽂件,如果新的版本号⼤于旧的,

或者新的⽂件在就ini中没有,这些就表⽰要更新的⽂件,然后逐⼀下载。

本程序名字为AutoUpdate,你⽣成这个exe,然后和主程序⼀起打包,创建桌⾯快捷⽅式时,指向AutoUpdate,⽽不是主

程序。

在本地还有⼀个ini⽂件,⽐如叫吧,⾥⾯内容是

[coninfo]

main=

param={app}2 -y

main=:是主程序名称,和升级程序在同⼀⽬录

param={app}2 -y :这是命令⾏参数,app为当前路径,在程序中替换掉,传递给主程序(如果需要的话)

的内容格式如下

[root]

办事处查询.txt=20100519

[dbcard]

2=20100519

FTP⽤户密码.txt=20100519

[root]代表根⽬录,后⾯的[dbcard]代表⼦⽬录,依次类推

unit Main;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, IdHTTP, IdBaseComponent, IdComponent, IdTCPConnection,

IdTCPClient, IdFTP, ComCtrls, ExtCtrls,IniFiles,ShellAPI, jpeg;

type

TfrmMain = class(TForm)

IdFTP1: TIdFTP;

IdHTTP1: TIdHTTP;

ProgressBar1: TProgressBar;

GroupBox1: TGroupBox;

ld_host: TLabeledEdit;

ld_username: TLabeledEdit;

procedure CheckUpdateList;

function ConnectFTP:Boolean;

procedure DownLoadFile;

procedure LoadIni;

procedure SaveIni;

public

{ Public declarations }

end;

var

frmMain: TfrmMain;

implementation

uses

omFile(FExePath + 'update_');

itempath := '';

//下⾯开始⽐较两个list,如果newFile的版本号⼤于oldFile的版本号或者oldFile中没有的都表⽰要更新的

for i := 0 to - 1 do

begin

itemstr := s[i];

if itemstr = '' then Continue;

if itemstr[1] = '[' then

begin

itempath := Copy(itemstr,2,Length(itemstr)-2);

//如果是根⽬录

if itempath = 'root' then

itempath := '/';

Continue;

end;

itemstr := [i];

index := fName(itemstr);

Dir(path);

ForceDirectories(FExePath+path);

s1 := list_[i].Caption;

s2 := FExePath+path+'/'+list_[i].Caption;

(s1,s2,True);

end

else