From 77880142582b1e0cae118dc7a69b2e01aea7e495 Mon Sep 17 00:00:00 2001 From: Francisco Ernesto Teixeira Date: Thu, 21 Feb 2008 03:01:10 +0000 Subject: [PATCH] Added methods that enable the update of running main application just giving the direction of newest main application file. --- packages/delphi10/heidisql.bdsproj | 2 +- packages/delphi11/heidisql.dproj | 16 +++--- source/helpers.pas | 83 ++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+), 9 deletions(-) diff --git a/packages/delphi10/heidisql.bdsproj b/packages/delphi10/heidisql.bdsproj index c176b03e..4bac8257 100644 --- a/packages/delphi10/heidisql.bdsproj +++ b/packages/delphi10/heidisql.bdsproj @@ -123,7 +123,7 @@ ..\..\build ..\..\build - ..\..\components\compilerdetection\include;..\..\components\heidisql\include;..\..\components\edbimage\build;..\..\components\heidisql\build;..\..\components\smdbgrid\build;..\..\components\smdbgrid\resources;..\..\components\synedit\build;..\..\components\synedit\resources;..\..\components\zeosdbo\build;..\..\components\virtualtreeview\build;..\..\components\virtualtreeview\resources;..\..\components\tntunictrls\build + ..\..\components\compilerdetection\include;..\..\components\heidisql\include;..\..\components\edbimage\build;..\..\components\heidisql\build;..\..\components\smdbgrid\build;..\..\components\smdbgrid\resources;..\..\components\synedit\build;..\..\components\synedit\resources;..\..\components\zeosdbo\build;..\..\components\virtualtreeview\build;..\..\components\virtualtreeview\resources;..\..\components\tntunictrls\build;..\..\res Vcl50;Vclx50;VclSmp50;Vcldb50;vclado50;ibevnt50;Vclbde50;vcldbx50;Qrpt50;TeeUI50;TeeDB50;Tee50;Dss50;TeeQR50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;NMFast50;webmid50;dclocx50;dclaxserver50;vcl;rtl;dbrtl;vcldb;bdertl;ZUtils6;ZCommon6 ..\..\source;..\..\components\compilerdetection\include;..\..\components\heidisql\include;..\..\components\edbimage\source;..\..\components\heidisql\source;..\..\components\smdbgrid\source;..\..\components\synedit\source;..\..\components\zeosdbo\src;..\..\components\zeosdbo\src\plain;..\..\components\zeosdbo\src\component;..\..\components\zeosdbo\src\core;..\..\components\zeosdbo\src\dbc;..\..\components\zeosdbo\src\parsesql;..\..\components\virtualtreeview\Source diff --git a/packages/delphi11/heidisql.dproj b/packages/delphi11/heidisql.dproj index d41d84ec..d3e6d971 100644 --- a/packages/delphi11/heidisql.dproj +++ b/packages/delphi11/heidisql.dproj @@ -19,10 +19,10 @@ ..\..\build ..\..\build ..\..\build - ..\..\components\compilerdetection\include;..\..\components\heidisql\include;..\..\components\edbimage\build;..\..\components\heidisql\build;..\..\components\synedit\build;..\..\components\synedit\resources;..\..\components\zeosdbo\build;..\..\components\virtualtreeview\build;..\..\components\virtualtreeview\Resources;..\..\components\tntunictrls\build - ..\..\components\compilerdetection\include;..\..\components\heidisql\include;..\..\components\edbimage\build;..\..\components\heidisql\build;..\..\components\synedit\build;..\..\components\synedit\resources;..\..\components\zeosdbo\build;..\..\components\virtualtreeview\build;..\..\components\virtualtreeview\Resources;..\..\components\tntunictrls\build - ..\..\components\compilerdetection\include;..\..\components\heidisql\include;..\..\components\edbimage\build;..\..\components\heidisql\build;..\..\components\synedit\build;..\..\components\synedit\resources;..\..\components\zeosdbo\build;..\..\components\virtualtreeview\build;..\..\components\virtualtreeview\Resources;..\..\components\tntunictrls\build - ..\..\components\compilerdetection\include;..\..\components\heidisql\include;..\..\components\edbimage\build;..\..\components\heidisql\build;..\..\components\synedit\build;..\..\components\synedit\resources;..\..\components\zeosdbo\build;..\..\components\virtualtreeview\build;..\..\components\virtualtreeview\Resources;..\..\components\tntunictrls\build + ..\..\components\compilerdetection\include;..\..\components\heidisql\include;..\..\components\edbimage\build;..\..\components\heidisql\build;..\..\components\synedit\build;..\..\components\synedit\resources;..\..\components\zeosdbo\build;..\..\components\virtualtreeview\build;..\..\components\virtualtreeview\Resources;..\..\components\tntunictrls\build;..\..\res + ..\..\components\compilerdetection\include;..\..\components\heidisql\include;..\..\components\edbimage\build;..\..\components\heidisql\build;..\..\components\synedit\build;..\..\components\synedit\resources;..\..\components\zeosdbo\build;..\..\components\virtualtreeview\build;..\..\components\virtualtreeview\Resources;..\..\components\tntunictrls\build;..\..\res + ..\..\components\compilerdetection\include;..\..\components\heidisql\include;..\..\components\edbimage\build;..\..\components\heidisql\build;..\..\components\synedit\build;..\..\components\synedit\resources;..\..\components\zeosdbo\build;..\..\components\virtualtreeview\build;..\..\components\virtualtreeview\Resources;..\..\components\tntunictrls\build;..\..\res + ..\..\components\compilerdetection\include;..\..\components\heidisql\include;..\..\components\edbimage\build;..\..\components\heidisql\build;..\..\components\synedit\build;..\..\components\synedit\resources;..\..\components\zeosdbo\build;..\..\components\virtualtreeview\build;..\..\components\virtualtreeview\Resources;..\..\components\tntunictrls\build;..\..\res RELEASE HeidiSQL False @@ -40,10 +40,10 @@ ..\..\build ..\..\build ..\..\build - $(BDS)\RaveReports\Lib;$(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;..\..\components\compilerdetection\include;..\..\components\heidisql\include;..\..\components\edbimage\build;..\..\components\heidisql\build;..\..\components\synedit\build;..\..\components\synedit\resources;..\..\components\zeosdbo\build;..\..\components\virtualtreeview\build;..\..\components\virtualtreeview\resources;..\..\components\tntunictrls\build - $(BDS)\RaveReports\Lib;$(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;..\..\components\compilerdetection\include;..\..\components\heidisql\include;..\..\components\edbimage\build;..\..\components\heidisql\build;..\..\components\synedit\build;..\..\components\synedit\resources;..\..\components\zeosdbo\build;..\..\components\virtualtreeview\build;..\..\components\virtualtreeview\resources;..\..\components\tntunictrls\build - $(BDS)\RaveReports\Lib;$(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;..\..\components\compilerdetection\include;..\..\components\heidisql\include;..\..\components\edbimage\build;..\..\components\heidisql\build;..\..\components\synedit\build;..\..\components\synedit\resources;..\..\components\zeosdbo\build;..\..\components\virtualtreeview\build;..\..\components\virtualtreeview\resources;..\..\components\tntunictrls\build - $(BDS)\RaveReports\Lib;$(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;..\..\components\compilerdetection\include;..\..\components\heidisql\include;..\..\components\edbimage\build;..\..\components\heidisql\build;..\..\components\synedit\build;..\..\components\synedit\resources;..\..\components\zeosdbo\build;..\..\components\virtualtreeview\build;..\..\components\virtualtreeview\resources;..\..\components\tntunictrls\build + $(BDS)\RaveReports\Lib;$(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;..\..\components\compilerdetection\include;..\..\components\heidisql\include;..\..\components\edbimage\build;..\..\components\heidisql\build;..\..\components\synedit\build;..\..\components\synedit\resources;..\..\components\zeosdbo\build;..\..\components\virtualtreeview\build;..\..\components\virtualtreeview\resources;..\..\components\tntunictrls\build;..\..\res + $(BDS)\RaveReports\Lib;$(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;..\..\components\compilerdetection\include;..\..\components\heidisql\include;..\..\components\edbimage\build;..\..\components\heidisql\build;..\..\components\synedit\build;..\..\components\synedit\resources;..\..\components\zeosdbo\build;..\..\components\virtualtreeview\build;..\..\components\virtualtreeview\resources;..\..\components\tntunictrls\build;..\..\res + $(BDS)\RaveReports\Lib;$(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;..\..\components\compilerdetection\include;..\..\components\heidisql\include;..\..\components\edbimage\build;..\..\components\heidisql\build;..\..\components\synedit\build;..\..\components\synedit\resources;..\..\components\zeosdbo\build;..\..\components\virtualtreeview\build;..\..\components\virtualtreeview\resources;..\..\components\tntunictrls\build;..\..\res + $(BDS)\RaveReports\Lib;$(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;..\..\components\compilerdetection\include;..\..\components\heidisql\include;..\..\components\edbimage\build;..\..\components\heidisql\build;..\..\components\synedit\build;..\..\components\synedit\resources;..\..\components\zeosdbo\build;..\..\components\virtualtreeview\build;..\..\components\virtualtreeview\resources;..\..\components\tntunictrls\build;..\..\res DEBUG HeidiSQL True diff --git a/source/helpers.pas b/source/helpers.pas index 8e64d6e5..21be5312 100644 --- a/source/helpers.pas +++ b/source/helpers.pas @@ -85,6 +85,8 @@ type function TColorToHex( Color : TColor ): string; function GetVTCaptions( VT: TVirtualStringTree; OnlySelected: Boolean = False; Column: Integer = 0 ): TStringList; function Pos2(const Needle, HayStack: string; const StartPos: Integer) : Integer; + procedure ExtractUpdater; + procedure UpdateItWith(const _file: String); var MYSQL_KEYWORDS : TStringList; @@ -92,6 +94,8 @@ var implementation +{$R updater.res} + uses main; type @@ -2134,6 +2138,85 @@ begin end; + +{** + Extract the updater from resource. +} +procedure ExtractUpdater; +var + ri: HRSRC; + rh: THandle; + bf: PChar; + ms: TMemoryStream; +begin + // look for resource UPDATER + ri := FindResource( HInstance, 'UPDATER', 'EXE' ); + + // define the Handle + rh := LoadResource( HInstance, ri ); + + if ( rh <> 0 ) then + begin + // alloc memory space + ms := TMemoryStream.Create(); + try + ms.Clear(); + bf := LockResource( rh ); + + // load the resource on memory stream + ms.WriteBuffer( bf[0], SizeOfResource( HInstance, ri ) ); + ms.Seek( 0, 0 ); + + // save the resource like executable + ms.SaveToFile( ExtractFilePath( Application.ExeName ) + 'updater.exe' ); + finally + // free memory + UnlockResource( rh ); + FreeResource( rh ); + ms.Free(); + end; + end; +end; + + + +{** + Update the current application with the file. + + @param _file the file that will replace the current application +} +procedure UpdateItWith(const _file: String); +var + app: String; +begin + // sanitize: try to remove the oldest updater + DeleteFile( PAnsiChar( ExtractFilePath( Application.ExeName ) + 'updater.exe' ) ); + + // retrive the application name without extension + app := Copy( Application.Exename, 1, ( Length( Application.Exename ) - 4 ) ); + + // sanitize: try to remove the oldest file + DeleteFile( PAnsiChar( app + '.old' ) ); + + // verify the file existence + if ( FileExists( _file ) ) then + begin + // copy to current application folder the newest file + CopyFile( PChar( _file ), PChar( app + '.new' ), False ); + + // extract the updater from current application resource + ExtractUpdater(); + + // call the updater + WinExec( PAnsiChar( '"' + ExtractFilePath( Application.ExeName ) + 'updater.exe" "' + app + '"' ), 0 ); + + // stop running the current application + Application.Terminate(); + end; +end; + + + initialization