I am using the resource for my updater. I compiled the resource using brcc32, than compiling the updater. when the updater launches its check, everything is written or updated with new ones. but about this process you need to write correctly, remove privileges when starting your programs.
I am adding the sample code below.
exe.rc file
newprog RCDATA Application.exe
makeres.bat file
brcc32 exe.rc
updater.dpr file
{$R exe.res}
single file and procedures
procedure ExtractRes(resname,fname,ext:string); var rStream:TResourceStream; fStream:TFileStream; fNamex:string; begin fNamex:=ExtractFilePath(Application.ExeName)+fname+'.'+ext; if not fileExists(fnamex) then begin try rStream:=tresourcestream.Create(hinstance,ResName,RT_rcDATA); fStream := TFileStream.Create(fnamex, fmCreate); fStream.CopyFrom(rStream, 0); finally rStream.Free; fstream.Free; end; end; end; procedure TForm1.Timer1Timer(Sender: TObject); var apath:string; begin if Timer1.Enabled then Timer1.Enabled:=false; apath:=ExtractFilePath(Application.ExeName); lblMesg.Caption:='Backup old version'; Application.ProcessMessages; if FileExists(apath+'Application_old.bak') then DeleteFile(apath+'Application_old.bak') ; while FileExists(apath+'Application.exe') do begin RenameFile(apath + 'Application.exe', apath + 'Application_old.bak'); sleep(1); if FileExists(apath+'Application.exe') then begin lblMesg.Caption:='It seems application still running. Waiting for end'; if FileExists(apath+'Application_old.bak') then DeleteFile(apath+'Application_old.bak'); DeleteFile(apath+'Application.exe'); end; Application.ProcessMessages; end; lblMesg.Caption:='Creating New Version..'; Application.ProcessMessages; ExtractRes('Application','Application','exe'); lblMesg.Caption:='Running New Version...'; Application.ProcessMessages; WinExec(pchar(apath+'Application.exe'),sw_show); Application.ProcessMessages; Halt; end;
I think this may help your 1,2,3 question. For 4, you can extend the code.
sabri.arslan
source share