Added methods that enable the update of running main application just giving the direction of newest main application file.

This commit is contained in:
Francisco Ernesto Teixeira
2008-02-21 03:01:10 +00:00
parent 218b63d5f5
commit 7788014258
3 changed files with 92 additions and 9 deletions

View File

@ -123,7 +123,7 @@
<Directories Name="UnitOutputDir">..\..\build</Directories>
<Directories Name="PackageDLLOutputDir">..\..\build</Directories>
<Directories Name="PackageDCPOutputDir"></Directories>
<Directories Name="SearchPath">..\..\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</Directories>
<Directories Name="SearchPath">..\..\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</Directories>
<Directories Name="Packages">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</Directories>
<Directories Name="Conditionals"></Directories>
<Directories Name="DebugSourceDirs">..\..\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</Directories>

View File

@ -19,10 +19,10 @@
<DCC_HppOutput>..\..\build</DCC_HppOutput>
<DCC_BplOutput>..\..\build</DCC_BplOutput>
<DCC_DcpOutput>..\..\build</DCC_DcpOutput>
<DCC_UnitSearchPath>..\..\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</DCC_UnitSearchPath>
<DCC_ResourcePath>..\..\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</DCC_ResourcePath>
<DCC_ObjPath>..\..\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</DCC_ObjPath>
<DCC_IncludePath>..\..\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</DCC_IncludePath>
<DCC_UnitSearchPath>..\..\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</DCC_UnitSearchPath>
<DCC_ResourcePath>..\..\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</DCC_ResourcePath>
<DCC_ObjPath>..\..\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</DCC_ObjPath>
<DCC_IncludePath>..\..\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</DCC_IncludePath>
<DCC_Define>RELEASE</DCC_Define>
<DCC_Description>HeidiSQL</DCC_Description>
<DCC_AssertionsAtRuntime>False</DCC_AssertionsAtRuntime>
@ -40,10 +40,10 @@
<DCC_HppOutput>..\..\build</DCC_HppOutput>
<DCC_BplOutput>..\..\build</DCC_BplOutput>
<DCC_DcpOutput>..\..\build</DCC_DcpOutput>
<DCC_UnitSearchPath>$(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</DCC_UnitSearchPath>
<DCC_ResourcePath>$(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</DCC_ResourcePath>
<DCC_ObjPath>$(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</DCC_ObjPath>
<DCC_IncludePath>$(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</DCC_IncludePath>
<DCC_UnitSearchPath>$(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</DCC_UnitSearchPath>
<DCC_ResourcePath>$(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</DCC_ResourcePath>
<DCC_ObjPath>$(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</DCC_ObjPath>
<DCC_IncludePath>$(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</DCC_IncludePath>
<DCC_Define>DEBUG</DCC_Define>
<DCC_Description>HeidiSQL</DCC_Description>
<DCC_UNIT_PLATFORM>True</DCC_UNIT_PLATFORM>

View File

@ -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