首页  编辑  

程序的自动升级

Tags: /超级猛料/Network.网络通讯/其它/   Date Created:

Detect and Download a new version of (an own) application?

uses

 {...,}IniFiles, UrlMon,

   type

 TForm1 = class(TForm)

   {...}

 private

   winsc: TiniFile;

   old: Integer;

   vernfo: TIniFile;

 end;

 

implementation

{$R *.dfm}

function DownloadFile(Source, Dest: string): Boolean;

 { Function for Downloading the file found on the net }

begin

 try

   Result := UrlDownloadToFile(nil, PChar(Source), PChar(Dest), 0, nil) = 0;

 except

   Result := False;

 end;

end;

function GetPathPath: string;

 { Retrive app path }

begin

 Result := ExtractFilePath(Application.ExeName);

end;

procedure TForm1.DownLoadNewVersion1Click(Sender: TObject);

var

 apath: string;

 new: Integer;

begin

 // This is the exact code from my application

 apath           := GetPathPath;

 Gauge1.Progress := 0;

 StatusBar1.SimplePanel := True;

 StatusBar1.SimpleText := 'Connecting to http://tsoft.home.ro';

 Gauge1.Progress := 20;

 if DownloadFile('http://www.tsoft.home.ro/update.ini', PChar(apath) + '/update.ini') then

 begin

   Gauge1.Progress := 50;

   StatusBAr1.SimplePanel := True;

   StatusBar1.SimpleText := 'Checking for newer versions...';

   vernfo := TiniFile.Create(GetPathPath + '/update.ini');

   new    := vernfo.ReadInteger('version', 'wsc', 7);

   vernfo.Free;

   if (old = new) then

   begin

     StatusBar1.SimplePanel := True;

     StatusBar1.SimpleText  := 'No new version detected';

     Gauge1.Progress        := 100;

   end

   else if DownloadFile('http://www.tsoft.home.ro/winsafe.exe',

     PChar(apath) + '/winsafe.exe') then

   begin

     ShowMessage('Update succeseful');

     Gauge1.Progress := 100;

     winsc           := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));

     winsc.WriteInteger('wsc', 'vernfo', new);

     winsc.Free;

   end

   else  

     MessageDlg('A new version has appeard but it requires a second install',

       mtInformation, [mbOK], 0);

 end

 else

 begin

   StatusBar1.SimplePanel := True;

   StatusBar1.SimpleText  := 'Failed to connect probably a internet problem';

   Gauge1.Progress        := 0;

 end;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

 //App version

 winsc := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));

 try

   old := winsc.ReadInteger('wsc', 'vernfo', 1);

 finally

   winsc.Free;

 end;

end;

end.

{The concept is very simple u download a ini file from your website that contains

the version you compare it with the one from your computer and it downloads the

file if the versions are Not equal if you find any froblems write me.}

3_update.zip (255.4KB)