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