diff --git a/build-res.bat b/build-res.bat
index ef7cd504..200d9fa3 100644
--- a/build-res.bat
+++ b/build-res.bat
@@ -2,8 +2,10 @@ brcc32 res\version.rc
cgrc res\icon.rc
brcc32 res\icon-question.rc
brcc32 res\manifest.rc
-brcc32 -fores\updater.res res\updater64.rc
+brcc32 res\updater.rc
cgrc.exe res\styles.rc
brcc32.exe source\vcl-styles-utils\AwesomeFont.rc
brcc32.exe source\vcl-styles-utils\AwesomeFont_zip.rc
+brcc32.exe res\updater\manifest.rc
+
pause
diff --git a/packages/Delphi11.2/heidisql.dpr b/packages/Delphi11.2/heidisql.dpr
index 9f9d5c07..6f6ad092 100644
--- a/packages/Delphi11.2/heidisql.dpr
+++ b/packages/Delphi11.2/heidisql.dpr
@@ -62,7 +62,7 @@ uses
{$R ..\..\res\icon-question.RES}
{$R ..\..\res\version.RES}
{$R ..\..\res\manifest.RES}
-{$R ..\..\res\updater.RES}
+{$IFDEF CPUX64}{$R ..\..\res\updater.RES}{$ENDIF}
{$R ..\..\res\styles.RES}
var
diff --git a/res/updater.rc b/res/updater.rc
new file mode 100644
index 00000000..2d8509ce
--- /dev/null
+++ b/res/updater.rc
@@ -0,0 +1 @@
+updater exe "updater\updater.exe"
\ No newline at end of file
diff --git a/res/updater/manifest.xml b/res/updater/manifest.xml
index c6051389..450de06e 100644
--- a/res/updater/manifest.xml
+++ b/res/updater/manifest.xml
@@ -6,7 +6,7 @@
processorArchitecture="*"
name="HeidiSQL"
type="win32" />
- A lightweight, fast and flexible interface to MySQL
+ HeidiSQL build updater
diff --git a/res/updater/updater.dpr b/res/updater/updater.dpr
index bdd20b63..c333af0a 100644
--- a/res/updater/updater.dpr
+++ b/res/updater/updater.dpr
@@ -1,119 +1,25 @@
program updater;
-{ A window which terminates running HeidiSQL instances and moves the downloaded update file to
- its desired directory. Avoids to use any VCL unit, to keep the executable small. }
+{ A console window which terminates running HeidiSQL instances and moves the downloaded update file to
+ its desired directory. }
+
+{$APPTYPE CONSOLE}
{$R manifest.RES}
-
// (un)comment the following resource inclusion to vary the binary size. Update checker trusts the same file size before overwriting the old one.
{$R ..\icon.RES}
uses
- Windows, Messages, Tlhelp32, psapi, Winapi.ShellAPI;
+ Winapi.Windows, Winapi.Messages, Winapi.TlHelp32, Winapi.PsAPI, Winapi.ShellAPI, System.SysUtils;
var
- WClass: TWndClass;
BackupPath, AppPath, DownloadPath: String;
- MainWin, HLabel: HWND;
- AppMsg: TMsg;
- FormShowing: Boolean = False;
+ RestartTaskName, RestartCmd, RestartParams: String;
const
AppName = 'HeidiSQL';
- WindowPadding = 10;
- WindowWidth = 600;
- WindowHeight = 80;
QuitTimeout = 20000; // We long we're gracefully waiting for a window to be gone, in milliseconds
- TerminatedCheck = 200; // Interval between checks if host application is gone
- PathDelim = '\';
-
-
-
-{ We don't include SysUtils unit, so we need to implement our own versions of some basic functions here }
-
-function FileExists(Filename: String): Boolean;
-var
- Find: THandle;
- Data: TWin32FindData;
-begin
- Find := FindFirstFile(PChar(Filename), Data);
- Result := Find <> INVALID_HANDLE_VALUE;
-end;
-
-function IntToStr(Value: Int64): String;
-var
- Minus : Boolean;
-begin
- Result := '';
- if Value = 0 then
- Result := '0';
- Minus := Value < 0;
- if Minus then
- Value := -Value;
- while Value > 0 do begin
- Result := Char((Value mod 10) + Integer('0')) + Result;
- Value := Value div 10;
- end;
- if Minus then
- Result := '-' + Result;
-end;
-
-function ExtractFileName(const FileName: string): string;
-var
- i: Integer;
-begin
- for i:=Length(Filename) downto 0 do
- if Filename[i] = PathDelim then
- break;
- Result := Copy(FileName, i+1, MaxInt);
-end;
-
-function ExtractFilePath(const FileName: string): string;
-var
- i: Integer;
-begin
- for i:=Length(Filename) downto 0 do
- if Filename[i] = PathDelim then
- break;
- Result := Copy(FileName, 1, i);
-end;
-
-
-{ Version of ValidFilename in main project, without usage of large IOutils SysUtils units
-function ValidFilename(Str: String): String;
-var
- InvChar: Char;
- i: Integer;
- InvalidFileNameChars: TArray;
-begin
- Result := Str;
- InvalidFileNameChars := TArray.Create(
- #0, #1, #2, #3, #4, #5, #6, #7, #8, #9, #10, #11, #12,
- #13, #14, #15, #16, #17, #18, #19, #20, #21, #22, #23, #24,
- #25, #26, #27, #28, #29, #30, #31,
- '"', '*', '/', ':', '<', '>', '?', '\', '|');
- for InvChar in InvalidFileNameChars do begin
- for i := 1 to Length(Str) do begin
- if Result[i] = InvChar then
- Result[i] := '_';
- end;
- end;
-end; }
-
-
-function Trim(const S: string): string;
-var
- I, L: Integer;
-begin
- L := Length(S);
- I := 1;
- if (L > 0) and (S[I] > ' ') and (S[L] > ' ') then Exit(S);
- while (I <= L) and (S[I] <= ' ') do Inc(I);
- if I > L then Exit('');
- while S[L] <= ' ' do Dec(L);
- Result := Copy(S, I, L - I + 1);
-end;
-
+ TerminatedCheck = 500; // Interval between checks if host application is gone
function GetEXEFromHandle(const wnd: HWND) : string;
var
@@ -169,12 +75,14 @@ end;
procedure Status(Text: String; IsError: Boolean=False);
+const
+ SleepSecondsOnError: Integer=10;
begin
- // Display status message on label
- SendMessage(HLabel, WM_SETTEXT, 0, LPARAM(PChar(Text)) );
- UpdateWindow(hLabel);
+ // Display status message
+ WriteLn(Text);
if IsError then begin
- Sleep(4000);
+ Writeln('Exiting in '+SleepSecondsOnError.ToString+' seconds...');
+ Sleep(SleepSecondsOnError * 1000);
Halt(1);
end;
end;
@@ -189,7 +97,7 @@ begin
// EnumWindows will stop processing if we return false
Result := True;
WndPath := GetEXEFromHandle(Wnd);
- if (WndPath <> AppPath) and (WndPath <> ExtractFilename(AppPath)) then
+ if (LowerCase(WndPath) <> LowerCase(AppPath)) and (LowerCase(WndPath) <> LowerCase(ExtractFilename(AppPath))) then
Exit;
SetLength(WndTitle, 256);
@@ -216,146 +124,54 @@ begin
end;
end;
-
-// Callback function for Timer
-procedure FormShow(wnd: HWND; uMsg: UINT; idEvent: UINT; dwTime: DWORD); stdcall;
-var
- RestartTaskName, RestartCmd, RestartParams: String;
+// Main program code
begin
- FormShowing := True;
- KillTimer(MainWin, 0);
- AppPath := Paramstr(1);
- DownloadPath := ParamStr(2);
- RestartTaskName := ParamStr(3);
+ try
+ AppPath := Paramstr(1);
+ DownloadPath := ParamStr(2);
+ RestartTaskName := ParamStr(3);
- // Paremeter syntax check
- if (AppPath = '') or (DownloadPath = '') or (RestartTaskName = '') then begin
- Status('Syntax: '+ExtractFilename(Paramstr(0))+' OldFile.exe NewFile.exe RestartTaskName'+#13#10+
- 'Please don''t execute this file directly.', True);
- end;
- if (not FileExists(AppPath)) or (not FileExists(DownloadPath)) then
- Status('Error: Either target file "'+AppPath+'" or download file "'+DownloadPath+'" does not exist.', True);
+ // Parameter syntax check
+ if (AppPath = '') or (DownloadPath = '') or (RestartTaskName = '') then begin
+ Status('Syntax: '+ExtractFilename(Paramstr(0))+' OldFile.exe NewFile.exe RestartTaskName'+#13#10+
+ 'Please don''t execute this file directly.', True);
+ end;
+ if (not FileExists(AppPath)) or (not FileExists(DownloadPath)) then
+ Status('Error: Either target file "'+AppPath+'" or download file "'+DownloadPath+'" does not exist.', True);
- // Terminate running instances
- Status('Close running '+AppName+' instances ...');
- EnumWindows(@EnumAllInstances, 0);
+ // Terminate running instances
+ Status('Close running '+AppName+' instances ...');
+ EnumWindows(@EnumAllInstances, 0);
- // Backup old .exe to working directory
- Status('Creating backup of old file ...');
- BackupPath := ExtractFilepath(Paramstr(0))+ExtractFilename(AppPath)+'.backup.exe';
- if FileExists(BackupPath) then
- DeleteFile(PChar(BackupPath));
- if not CopyFile(PChar(AppPath), PChar(BackupPath), False) then
- Status('Failed to create backup file "'+BackupPath+'" from "'+AppPath+'"', True)
- else begin
- DeleteFile(PChar(AppPath));
- Status('Success.');
- end;
-
- // Move update file to final path
- Status('Moving downloaded file to desired directory ...');
- // Issue #1616: MoveFile() does not work when target directory is a symlink, so we prefer CopyFile + DeleteFile
- if not CopyFile(PChar(DownloadPath), PChar(AppPath), False) then
- Status('Failed to copy file "'+DownloadPath+'" to "'+AppPath+'"', True)
- else begin
- DeleteFile(PChar(DownloadPath));
- Status('Success. Restarting '+AppName+' through task "'+RestartTaskName+'" now ...');
- RestartCmd := 'schtasks';
- RestartParams := '/Run /TN ' + RestartTaskName;
- ShellExecute(0, 'open', PChar(RestartCmd), PChar(RestartParams), '', SW_HIDE);
- end;
- PostQuitMessage(0);
-end;
-
-
-function WindowProc(hWnd: HWND; msg: UINT; wpr: WPARAM; lpr: LPARAM): LRESULT; stdcall;
-var
- x, y: integer;
- Font: HFont;
-begin
- // Custom window procedure
- case msg of
- // WM_NCCREATE: Non-client part of the window is being created
- WM_CREATE: begin
- // Center window
- x := GetSystemMetrics(SM_CXSCREEN);
- y := GetSystemMetrics(SM_CYSCREEN);
- MoveWindow(hWnd,
- (x div 2) - (WindowWidth div 2),
- (y div 2) - (WindowHeight div 2),
- WindowWidth,
- WindowHeight,
- true);
- // Create status label
- HLabel := CreateWindow(
- 'STATIC', // Class name
- 'Status:', // Label's text
- WS_VISIBLE or WS_CHILD or SS_LEFT, // Styles
- WindowPadding, // X pos
- WindowPadding, // Y pos
- WindowWidth - 2*WindowPadding, // Width
- WindowHeight - 2*WindowPadding, // Height
- hWnd, // Parent hwnd
- 0, // ID
- MainWin, // HInstance of program
- nil // Params for main window
- );
- // Cosmetics
- Font := Createfont(-11, 0, 0, 0, 0, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, 'Tahoma');
- SendMessage(HLabel, WM_SETFONT, Font, 1);
- SetBkColor(hwnd, COLOR_BTNFACE+1);
+ // Backup old .exe to working directory
+ Status('Creating backup of old file ...');
+ BackupPath := ExtractFilepath(Paramstr(0))+ExtractFilename(AppPath)+'.backup.exe';
+ if FileExists(BackupPath) then
+ DeleteFile(PChar(BackupPath));
+ if not CopyFile(PChar(AppPath), PChar(BackupPath), False) then
+ Status('Failed to create backup file "'+BackupPath+'" from "'+AppPath+'"', True)
+ else begin
+ DeleteFile(PChar(AppPath));
+ Status('Success.');
end;
- WM_SHOWWINDOW: begin
- if not FormShowing then
- SetTimer(MainWin, 0, 200, @FormShow);
- end;
-
- WM_DESTROY: begin
- PostQuitMessage(0);
+ // Move update file to final path
+ Status('Moving downloaded file to desired directory ...');
+ // Issue #1616: MoveFile() does not work when target directory is a symlink, so we prefer CopyFile + DeleteFile
+ if not CopyFile(PChar(DownloadPath), PChar(AppPath), False) then
+ Status('Failed to copy file "'+DownloadPath+'" to "'+AppPath+'"', True)
+ else begin
+ DeleteFile(PChar(DownloadPath));
+ Status('Success. Restarting '+AppName+' through task "'+RestartTaskName+'" now ...');
+ RestartCmd := 'schtasks';
+ RestartParams := '/Run /TN ' + RestartTaskName;
+ ShellExecute(0, 'open', PChar(RestartCmd), PChar(RestartParams), '', SW_HIDE);
end;
+ Status('Exiting in 10 seconds...');
+ Sleep(10000);
+ except
+ on E: Exception do
+ Status(E.ClassName + ': ' + E.Message, True);
end;
-
- Result := DefWindowProc(hWnd, msg, wpr, lpr);
-end;
-
-
-
-// Main program goes here
-begin
- // Define window class
- WClass.hInstance := hInstance;
- WClass.lpszClassName := 'WndClass';
- WClass.style := CS_HREDRAW or CS_VREDRAW;
- WClass.hIcon := LoadIcon(hInstance, IDI_WINLOGO);
- WClass.lpfnWndProc := @WindowProc;
- WClass.hbrBackground := COLOR_BTNFACE+1;
- WClass.hCursor := LoadCursor(0, IDC_ARROW);
- WClass.cbClsExtra := 0;
- WClass.cbWndExtra := 0;
- WClass.lpszMenuName := '';
- RegisterClass(WClass);
-
- // Create form
- MainWin := CreateWindow(
- WClass.lpszClassName,
- AppName+' Updater',
- WS_POPUPWINDOW or WS_CAPTION or WS_VISIBLE,
- 100, // Default x + y coordinates, will be centered in WM_CREATE
- 100,
- WindowWidth, // nWidth
- WindowHeight, // nHeight
- 0, // hWndParent
- 0, // hMenu
- hInstance, // hInstance
- nil // lpParam
- );
-
- // Message loop
- while GetMessage(AppMsg, 0, 0, 0) do begin
- TranslateMessage(AppMsg);
- DispatchMessage(AppMsg);
- end;
- ExitCode := AppMsg.wParam;
end.
diff --git a/res/updater/updater.dproj b/res/updater/updater.dproj
index 7a6f37bc..a369efb1 100644
--- a/res/updater/updater.dproj
+++ b/res/updater/updater.dproj
@@ -1,15 +1,14 @@
- {24E2AAD6-CDE7-46EC-95BD-79028373B17A}
+ {C28BA881-C743-44B2-B6E9-C2E111A6A9A4}
19.5
- updater.dpr
- Release
- DCC32
- True
- Console
None
- Win32
- 3
+ True
+ Debug
+ Win64
+ 2
+ Console
+ updater.dpr
true
@@ -24,50 +23,92 @@
Base
true
-
+
true
Base
true
-
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
true
Base
true
+
+ true
+ Cfg_2
+ true
+ true
+
- 1031
- CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
- System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace)
- ..\
- vcl;rtl;vclx;vclimg;vclactnband;dbrtl;vcldb;vcldbx;bdertl;vcltouch;xmlrtl;dsnap;dsnapcon;TeeUI;TeeDB;Tee;vclib;ibxpress;adortl;IndyCore;IndySystem;IndyProtocols;inet;intrawebdb_100_140;Intraweb_100_140;VclSmp;vclie;websnap;webdsnap;inetdb;inetdbbde;inetdbxpress;soaprtl;vclribbon;dbexpress;DbxCommonDriver;DataSnapIndy10ServerTransport;DataSnapProviderClient;DbxClientDriver;DataSnapServer;DBXInterBaseDriver;DBXMySQLDriver;dbxcds;DBXFirebirdDriver;DBXSybaseASEDriver;DBXSybaseASADriver;DBXOracleDriver;DBXMSSQLDriver;DBXInformixDriver;DBXDb2Driver;madBasic_;madDisAsm_;madExcept_;SynEditR;VirtualTreesR;$(DCC_UsePackage)
- ..\updater.exe
- 00400000
- x86
+ .\$(Platform)\$(Config)
+ false
false
false
- false
- false
false
+ false
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
updater
- $(BDS)\bin\delphi_PROJECTICON.ico
- $(BDS)\bin\delphi_PROJECTICNS.icns
+ 1031
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ .\
- System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ vclwinx;DataSnapServer;fmx;emshosting;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;DBXMSSQLDriver;FireDACCommonODBC;emsclient;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;emsedge;bindcompfmx;DBXFirebirdDriver;SynEdit_R;madBasic_;inetdb;ibmonitor;FireDACSqliteDriver;DbxClientDriver;FireDACASADriver;soapmidas;vclactnband;fmxFireDAC;dbexpress;FireDACInfxDriver;DBXMySQLDriver;VclSmp;inet;DataSnapCommon;vcltouch;fmxase;DBXOdbcDriver;dbrtl;FireDACDBXDriver;FireDACOracleDriver;fmxdae;FireDACMSAccDriver;CustomIPTransport;FireDACMSSQLDriver;DataSnapIndy10ServerTransport;DataSnapConnectors;vcldsnap;DBXInterBaseDriver;madExcept_;FireDACMongoDBDriver;IndySystem;FireDACTDataDriver;vcldb;ibxbindings;VirtualTreesR;vclFireDAC;madDisAsm_;bindcomp;FireDACCommon;DataSnapServerMidas;FireDACODBCDriver;emsserverresource;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;DataSnapClient;DataSnapProviderClient;adortl;DBXSybaseASEDriver;DBXDb2Driver;vclimg;DataSnapFireDAC;emsclientfiredac;FireDACPgDriver;FireDAC;FireDACDSDriver;inetdbxpress;xmlrtl;tethering;ibxpress;bindcompvcl;dsnap;CloudService;DBXSybaseASADriver;DBXOracleDriver;FireDACDb2Driver;DBXInformixDriver;vclib;fmxobj;bindcompvclsmp;DataSnapNativeClient;DatasnapConnectorsFreePascal;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage)
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
1033
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
- System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ vclwinx;DataSnapServer;fmx;emshosting;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;DBXMSSQLDriver;FireDACCommonODBC;emsclient;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;emsedge;bindcompfmx;DBXFirebirdDriver;SynEdit_R;inetdb;ibmonitor;FireDACSqliteDriver;DbxClientDriver;FireDACASADriver;soapmidas;vclactnband;fmxFireDAC;dbexpress;FireDACInfxDriver;DBXMySQLDriver;VclSmp;inet;DataSnapCommon;vcltouch;fmxase;DBXOdbcDriver;dbrtl;FireDACDBXDriver;FireDACOracleDriver;fmxdae;FireDACMSAccDriver;CustomIPTransport;FireDACMSSQLDriver;DataSnapIndy10ServerTransport;DataSnapConnectors;vcldsnap;DBXInterBaseDriver;FireDACMongoDBDriver;IndySystem;FireDACTDataDriver;vcldb;ibxbindings;VirtualTreesR;vclFireDAC;bindcomp;FireDACCommon;DataSnapServerMidas;FireDACODBCDriver;emsserverresource;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;DataSnapClient;DataSnapProviderClient;adortl;DBXSybaseASEDriver;DBXDb2Driver;vclimg;DataSnapFireDAC;emsclientfiredac;FireDACPgDriver;FireDAC;FireDACDSDriver;inetdbxpress;xmlrtl;tethering;ibxpress;bindcompvcl;dsnap;CloudService;DBXSybaseASADriver;DBXOracleDriver;FireDACDb2Driver;DBXInformixDriver;vclib;fmxobj;bindcompvclsmp;DataSnapNativeClient;DatasnapConnectorsFreePascal;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage)
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ Debug
1033
+ (None)
+ none
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+ true
+ true
+
+
+ false
+
+
+ 1033
+
+
false
RELEASE;$(DCC_Define)
0
0
-
- DEBUG;$(DCC_Define)
+
+ 1033
@@ -76,64 +117,887 @@
Base
-
+
Cfg_1
Base
-
+
Cfg_2
Base
-
Delphi.Personality.12
-
+ Application
updater.dpr
-
-
- False
- False
- 1
- 0
- 0
- 0
- False
- False
- False
- False
- False
- 1031
- 1252
-
-
-
-
- 1.0.0.0
-
-
-
-
-
- 1.0.0.0
-
-
- File D:\heidisql\trunk\components\pngcomponents\build\PngComponentsD.bpl not found
- Microsoft Office 2000 Sample Automation Server Wrapper Components
- Microsoft Office XP Sample Automation Server Wrapper Components
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ updater.exe
+ true
+
+
+
+
+ updater.rsm
+ true
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 64
+
+
+ classes
+ 64
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ 0
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ Contents
+ 1
+
+
+ Contents
+ 1
+
+
+ Contents
+ 1
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- True
+ False
True
12
+
+
diff --git a/res/updater/updater.exe b/res/updater/updater.exe
new file mode 100644
index 00000000..dd784ce0
Binary files /dev/null and b/res/updater/updater.exe differ
diff --git a/res/updater32.exe b/res/updater32.exe
deleted file mode 100644
index ffb7d443..00000000
Binary files a/res/updater32.exe and /dev/null differ
diff --git a/res/updater32.rc b/res/updater32.rc
deleted file mode 100644
index 44bc7594..00000000
--- a/res/updater32.rc
+++ /dev/null
@@ -1 +0,0 @@
-updater exe "updater32.exe"
\ No newline at end of file
diff --git a/res/updater64.exe b/res/updater64.exe
deleted file mode 100644
index e1b58d68..00000000
Binary files a/res/updater64.exe and /dev/null differ
diff --git a/res/updater64.rc b/res/updater64.rc
deleted file mode 100644
index bbe3b01e..00000000
--- a/res/updater64.rc
+++ /dev/null
@@ -1 +0,0 @@
-updater exe "updater64.exe"
\ No newline at end of file