I do it slightly differently – I have a dedicated loader program which can update a number of files and programs in one go. It runs as the startup/splash screen for the main app menu.
Updated programs are in an update folder, working programs are in a (local) folder It does: -Reads a list of files to check -copies any newer files from the update folder to the working folder -because it only copies newer files it is fast. -checks the dates and times of all files afterwards, and retries a second way if any discrepancies. Logs progress and errors. Warns if any not latest. -runs the main menu program and quits. -Main menu also periodically checks same list for pending updates and turns the “get updates” button bright yellow. -If “Get updates” clicked it runs the updater program and quits. Main smart is to check date and time file stamps are within 10 seconds to be the same. Different file systems have different time granularities (FAT32 I think is around 2 seconds and NTFS is milliseconds I think) so if you copy from one to another the dates and times will likely be slightly different if update and working folders are on different filesystems. (Also the updater program is the only one run from the updates folder – all others from working folder) This sort of scheme is used by Firefox too – it runs a program updater.exe and quits, updater.exe does the updates (usually a number of files are updated), and then runs firefox again. function xfFilesChanged(file1: string; file2: string): integer; //check 2 files modification date //returns 0=both files same, 1=file1 later, 2=file2 later //if within 10secs counted as same //note if one file does not exist, returns other as later var fileage1, fileage2: integer; dtdate1, dtdate2, dt10secs: TDateTime; begin result := 0; fileage1 := FileAge(file1); fileage2 := FileAge(file2); if (fileage1 < 0) and (fileage2 > 0) then begin result := 2; exit; end; if (fileage2 < 0) and (fileage1 > 0) then begin result := 1; exit; end; if (fileage1 < 0) or (fileage2 < 0) then exit; //maybe both don't exist dtdate1 := FileDatetoDateTime(fileage1); dtdate2 := FileDatetoDateTime(fileage2); if dtdate1 = dtdate2 then begin result := 0; exit; end; //now if not same, check if within 10 secs //in case of different filesystems dt10secs := encodetime(0, 0, 10, 0); if (dtdate2 > (dtdate1 - dt10secs)) and (dtdate2 < (dtdate1 + dt10secs)) then begin result := 0; exit; end; //still different if dtdate1 > dtdate2 then result := 1 else result := 2; end; John
_______________________________________________ NZ Borland Developers Group - Delphi mailing list Post: delphi@delphi.org.nz Admin: http://delphi.org.nz/mailman/listinfo/delphi Unsubscribe: send an email to delphi-requ...@delphi.org.nz with Subject: unsubscribe