大概是这样的。没测。。
呵呵。。 http的传输还是比较好的
procedure checkupdate;
var
ustream:tmemorystream;
verstr:string;
oldname,newname:pchar;
oldsize,newsize:dword;
begin
ustream :=tmemorystream.Create ;
try
//get new version infomation
verstr:=frmclient.HTTPC.Get('/jfgl/version.ini');
if (verstr<>'') and ((strtointdef(fetch(verstr,'.'),1)>1) or (strtointdef(fetch(verstr,'.'),0)>1) or (strtointdef(fetch(verstr,'.'),1)>0) or (strtointdef(fetch(verstr,'.'),1)>0)) then
try
//get new exe file and rename to filename.tmp
frmclient.httpc.Get('/jfgl/client.exe',ustream);
ustream.SaveToFile(ChangeFileExt(application.ExeName,'.tmp'));
//replace exe file until last boot because it is now running
//if you have better method please tell me,thank's
getmem(oldname,max_path);
fillchar(oldname[0],max_path-1,0);
getshortpathname(pchar(application.exename),oldname,oldsize);
getmem(newname,max_path);
fillchar(newname[0],max_path-1,0);
getshortpathname(pchar(ChangeFileExt(application.ExeName,'.tmp')),newname,newsize);
movefileex(newname,oldname,MOVEFILE_DELAY_UNTIL_REBOOT or MOVEFILE_REPLACE_EXISTING);
except
end;
except
//
end;
freeandnil(ustream);
end;