mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-06 18:24:26 +08:00
Rethink portable releases:
* Remove complicated and unreadable NSIS stuff. No need to have a installer for a developer application. ZIP file is fine. * On startup, if a portable_settings.txt exists in the application folder, heidisql.exe will read its contents into a unique registry key. * In MainForm.OnDestroy, settings are written to that file again, and the reg key gets deleted. * Avoid using Microsoft's .reg file syntax, as you need admin privileges to store and restore such files, even when using the appropriate Windows API functions.
This commit is contained in:
Binary file not shown.
Before Width: | Height: | Size: 79 KiB |
@ -1,84 +0,0 @@
|
|||||||
; Script generated by the Inno Setup Script Wizard.
|
|
||||||
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
|
||||||
|
|
||||||
; Original HeidiSQL Portable setup script for Innosetup based on
|
|
||||||
; HeidiSQL setup script
|
|
||||||
|
|
||||||
[Setup]
|
|
||||||
AppId=HeidiSQL
|
|
||||||
AppName=HeidiSQL Portable
|
|
||||||
AppVerName=HeidiSQL Portable 4.0
|
|
||||||
AppVersion=1.0.0.0
|
|
||||||
VersionInfoVersion=1.0.0.0
|
|
||||||
AppPublisher=Ansgar Becker
|
|
||||||
AppPublisherURL=http://www.heidisql.com/
|
|
||||||
AppSupportURL=http://forum.heidisql.com/
|
|
||||||
AppUpdatesURL=http://download.heidisql.com/
|
|
||||||
AppContact=heidisql@anse.de
|
|
||||||
DefaultDirName=\HeidiSQLPortable
|
|
||||||
LicenseFile=.\..\..\out\license.txt
|
|
||||||
WizardImageFile=.\..\..\res\installer-logo.bmp
|
|
||||||
WizardImageBackColor=$ffffff
|
|
||||||
WizardSmallImageFile=.\..\..\res\installer-small-logo.bmp
|
|
||||||
OutputDir=.
|
|
||||||
OutputBaseFilename=HeidiSQLPortable_4.0_Setup
|
|
||||||
SetupIconFile=.\..\..\res\mainicon.ico
|
|
||||||
; uncomment the following line if you want your installation to run on NT 3.51 too.
|
|
||||||
; MinVersion=4,3.51
|
|
||||||
UsePreviousAppDir=no
|
|
||||||
DirExistsWarning=auto
|
|
||||||
PrivilegesRequired=none
|
|
||||||
; no uninstallation support is included, requiring the end-user
|
|
||||||
; to manually remove the files pertaining to your application.
|
|
||||||
Uninstallable=no
|
|
||||||
|
|
||||||
[InstallDelete]
|
|
||||||
Type: files; Name: "{app}\App\HeidiSQL\libmysql40.dll"
|
|
||||||
Type: files; Name: "{app}\App\HeidiSQL\libmysql41.dll"
|
|
||||||
Type: files; Name: "{app}\App\HeidiSQL\heidisql.exe.manifest"
|
|
||||||
|
|
||||||
[Files]
|
|
||||||
Source: ".\HeidiSQLPortable.exe"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: ".\..\..\out\heidisql.exe"; DestDir: "{app}\App\HeidiSQL"; Flags: ignoreversion
|
|
||||||
Source: ".\..\..\out\readme.txt"; DestDir: "{app}\App\HeidiSQL"; Flags: ignoreversion
|
|
||||||
Source: ".\..\..\out\license.txt"; DestDir: "{app}\App\HeidiSQL"; Flags: ignoreversion
|
|
||||||
Source: ".\..\..\out\gpl.txt"; DestDir: "{app}\App\HeidiSQL"; Flags: ignoreversion
|
|
||||||
Source: ".\..\..\out\libmysql.dll"; DestDir: "{app}\App\HeidiSQL"; Flags: ignoreversion
|
|
||||||
|
|
||||||
[INI]
|
|
||||||
Filename: "{app}\App\HeidiSQL\heidisql.url"; Section: "InternetShortcut"; Key: "URL"; String: "http://www.heidisql.com/"
|
|
||||||
Filename: "{app}\App\HeidiSQL\heidisql_forum.url"; Section: "InternetShortcut"; Key: "URL"; String: "http://www.heidisql.com/forum/"
|
|
||||||
Filename: "{app}\App\HeidiSQL\donate.url"; Section: "InternetShortcut"; Key: "URL"; String: "http://www.heidisql.com/donate.php"
|
|
||||||
|
|
||||||
[Run]
|
|
||||||
Filename: "{app}\HeidiSQLPortable.exe"; Description: "Launch HeidiSQL Portable"; Flags: nowait postinstall skipifsilent
|
|
||||||
|
|
||||||
[Code]
|
|
||||||
procedure DonateClick(Sender: TObject);
|
|
||||||
var
|
|
||||||
ErrorCode: Integer;
|
|
||||||
begin
|
|
||||||
ShellExec('open', 'http://www.heidisql.com/donate.php', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure InitializeWizard();
|
|
||||||
var
|
|
||||||
txt: TNewStaticText;
|
|
||||||
btn: TButton;
|
|
||||||
begin
|
|
||||||
txt := TNewStaticText.Create(WizardForm);
|
|
||||||
txt.Parent := WizardForm.FinishedPage;
|
|
||||||
txt.Caption := 'HeidiSQL is free software. You may make a donation:';
|
|
||||||
txt.Left := WizardForm.FinishedLabel.Left;
|
|
||||||
txt.Top := WizardForm.FinishedLabel.Top + 130;
|
|
||||||
txt.AutoSize := True;
|
|
||||||
|
|
||||||
btn := TButton.Create(WizardForm);
|
|
||||||
btn.Parent := WizardForm.FinishedPage;
|
|
||||||
btn.Left := txt.Left;
|
|
||||||
btn.Top := txt.Top + txt.Height + 10;
|
|
||||||
btn.Width := 120;
|
|
||||||
btn.Height := WizardForm.CancelButton.Height;
|
|
||||||
btn.Caption := 'Donate';
|
|
||||||
btn.OnClick := @DonateClick;
|
|
||||||
end;
|
|
@ -1,454 +0,0 @@
|
|||||||
; **************************************************************************
|
|
||||||
; Name: HeidiSQL Portable
|
|
||||||
;
|
|
||||||
; Website: http://www.heidisql.com/
|
|
||||||
;
|
|
||||||
; Written for:
|
|
||||||
; NSIS 2.45 or higher
|
|
||||||
; Required plugins: Registry, FindProcDLL
|
|
||||||
;
|
|
||||||
; License:
|
|
||||||
; Copyright<68> 2009 by HeidiSQL Team
|
|
||||||
;
|
|
||||||
; Attention: When doing backups of existing directories or files, this could be a lengthy
|
|
||||||
; operation depending on the speed of your USB device. Keep this in mind!
|
|
||||||
; The status window showing the copy is enabled
|
|
||||||
;
|
|
||||||
; Portable application template created 2006 by Karl Loncarek, version 1.4.1 - 2006/11/30,
|
|
||||||
; modified by Bruno Soares Pasin and Francisco Ernesto Teixeira for heidisql.com
|
|
||||||
; License of this template see the respective readme.txt.
|
|
||||||
; **************************************************************************
|
|
||||||
|
|
||||||
; **************************************************************************
|
|
||||||
; * Define constants
|
|
||||||
; **************************************************************************
|
|
||||||
!define AUTHOR "HeidiSQL Team"
|
|
||||||
!define APP "HeidiSQL"
|
|
||||||
!define VER "1.0.0.0"
|
|
||||||
!define APPVER "4.0"
|
|
||||||
!define EXE "heidisql.exe"
|
|
||||||
!define PNAME "${App}Portable"
|
|
||||||
!define ICON "..\..\res\mainicon.ico"
|
|
||||||
!define SPLASHIMAGE "${PNAME}.bmp"
|
|
||||||
!define REGKEYS "HKEY_CURRENT_USER\Software\HeidiSQL"
|
|
||||||
!define INI "${PNAME}.ini"
|
|
||||||
|
|
||||||
; **************************************************************************
|
|
||||||
; * Includes
|
|
||||||
; **************************************************************************
|
|
||||||
!include "Registry.nsh"
|
|
||||||
!include "WordFunc.nsh"
|
|
||||||
!insertmacro "WordFind"
|
|
||||||
!include "FileFunc.nsh"
|
|
||||||
!insertmacro "GetParameters"
|
|
||||||
|
|
||||||
; **************************************************************************
|
|
||||||
; * Runtime Switches
|
|
||||||
; **************************************************************************
|
|
||||||
CRCCheck On
|
|
||||||
WindowIcon Off
|
|
||||||
SilentInstall Silent
|
|
||||||
AutoCloseWindow True
|
|
||||||
|
|
||||||
; **************************************************************************
|
|
||||||
; * Define variables
|
|
||||||
; **************************************************************************
|
|
||||||
Var ACTION
|
|
||||||
Var ACTIONDIRECTORY
|
|
||||||
Var ACTIONPARAMETERS
|
|
||||||
Var SPLASHSCREEN
|
|
||||||
Var PROGRAMEXE
|
|
||||||
Var PROGRAMDIR
|
|
||||||
Var PROGRAMPARMS
|
|
||||||
Var DATADIR
|
|
||||||
Var INIFILE
|
|
||||||
Var SECONDLAUNCH
|
|
||||||
|
|
||||||
; **************************************************************************
|
|
||||||
; * Set basic information
|
|
||||||
; **************************************************************************
|
|
||||||
Name "${APP} Portable"
|
|
||||||
!ifdef ICON
|
|
||||||
Icon "${ICON}"
|
|
||||||
!endif
|
|
||||||
Caption "${APP} Portable - ${VER}"
|
|
||||||
OutFile "${PNAME}.exe"
|
|
||||||
|
|
||||||
; **************************************************************************
|
|
||||||
; * Set version information
|
|
||||||
; **************************************************************************
|
|
||||||
LoadLanguageFile "${NSISDIR}\Contrib\Language files\English.nlf"
|
|
||||||
VIProductVersion "${Ver}"
|
|
||||||
VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "${APP} ${APPVER} Portable"
|
|
||||||
VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "Allow ${APP} to be run from a removeable drive."
|
|
||||||
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "<EFBFBD> ${AUTHOR}"
|
|
||||||
VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "by ${AUTHOR}"
|
|
||||||
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "${APP} ${APPVER} Portable"
|
|
||||||
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${VER}"
|
|
||||||
VIAddVersionKey /LANG=${LANG_ENGLISH} "OriginalFilename" "${PNAME}.exe"
|
|
||||||
|
|
||||||
; **************************************************************************
|
|
||||||
; * Function: Other initialisations before launch of program
|
|
||||||
; **************************************************************************
|
|
||||||
Function Init
|
|
||||||
FunctionEnd
|
|
||||||
|
|
||||||
; **************************************************************************
|
|
||||||
; * Function: Other things that have to be cleaned up after end of the program
|
|
||||||
; **************************************************************************
|
|
||||||
Function CleanUp
|
|
||||||
FunctionEnd
|
|
||||||
|
|
||||||
; **************************************************************************
|
|
||||||
; * Function: Initialize working variables
|
|
||||||
; **************************************************************************
|
|
||||||
Function InitVariables
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; Check whether an INI file exists, set variable pointing to it
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
IfFileExists "$EXEDIR\${INI}" "" CheckPortableINI
|
|
||||||
StrCpy "$INIFILE" "$EXEDIR\${INI}"
|
|
||||||
Goto ReadINIFile
|
|
||||||
CheckPortableINI:
|
|
||||||
IfFileExists "$EXEDIR\${PNAME}\${INI}" "" CheckPortableAppsINI
|
|
||||||
StrCpy "$INIFILE" "$EXEDIR\${PNAME}\${INI}"
|
|
||||||
Goto ReadINIFile
|
|
||||||
CheckPortableAppsINI:
|
|
||||||
IfFileExists "$EXEDIR\PortableApps\${PNAME}\${INI}" "" CheckAppsINI
|
|
||||||
StrCpy "$INIFILE" "$EXEDIR\PortableApps\${PNAME}\${INI}"
|
|
||||||
Goto ReadINIFile
|
|
||||||
CheckAppsINI:
|
|
||||||
IfFileExists "$EXEDIR\Apps\${PNAME}\${INI}" "" CheckDataINI
|
|
||||||
StrCpy "$INIFILE" "$EXEDIR\Apps\${PNAME}\${INI}"
|
|
||||||
Goto ReadINIFile
|
|
||||||
CheckDataINI:
|
|
||||||
IfFileExists "$EXEDIR\Data\${PNAME}\${INI}" "" NoINIFile
|
|
||||||
StrCpy "$INIFILE" "$EXEDIR\Data\${PNAME}\${INI}"
|
|
||||||
Goto ReadINIFile
|
|
||||||
Goto NoINIFile
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; Read content of the INI file
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
ReadINIFile:
|
|
||||||
ReadINIStr $0 "$INIFILE" "${PNAME}" "ProgramDirectory"
|
|
||||||
StrCmp $0 "" NoINIFile ; if emtpy retrieve correct setting
|
|
||||||
StrCpy "$PROGRAMDIR" "$EXEDIR\$0" ; save program directory
|
|
||||||
ReadINIStr $0 "$INIFILE" "${PNAME}" "DataDirectory"
|
|
||||||
StrCmp $0 "" NoINIFile ; if empty retrieve correct setting
|
|
||||||
StrCpy "$DATADIR" "$EXEDIR\$0" ; save data directory
|
|
||||||
ReadINIStr $0 "$INIFILE" "${PNAME}" "ProgramExecutable"
|
|
||||||
StrCpy "$PROGRAMEXE" "$0" ; save .exe name
|
|
||||||
StrCmp $0 "" "" Splash ; if emtpy use default
|
|
||||||
StrCpy "$PROGRAMEXE" "${EXE}" ; set default value
|
|
||||||
Splash:
|
|
||||||
ReadINIStr $0 "$INIFILE" "${PNAME}" "SplashScreen"
|
|
||||||
StrCpy "$SPLASHSCREEN" "$0" ; save state of splashscreen display
|
|
||||||
StrCmp "$SPLASHSCREEN" "" "" ProgramParameters ; check whether variable splashscreen was empty
|
|
||||||
StrCpy "$SPLASHSCREEN" "enabled" ; set to default
|
|
||||||
ProgramParameters:
|
|
||||||
ReadINIStr $0 "$INIFILE" "${PNAME}" "ProgramParameters"
|
|
||||||
StrCpy "$PROGRAMPARMS" "$0" ; save additional program parameters
|
|
||||||
Goto InitVarEnd ; finished reading the INI file
|
|
||||||
NoINIFile: ; default settings for all the variables
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; Set default values for variables
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
StrCpy "$PROGRAMEXE" "${EXE}" ; use default setting
|
|
||||||
StrCpy "$PROGRAMPARMS" ""
|
|
||||||
StrCpy "$SPLASHSCREEN" "enabled" ; enable splashscreen
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; Check which directory configuration is used and set variables accordingly
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
IfFileExists "$EXEDIR\App\${APP}\$PROGRAMEXE" "" CheckPortableDIR
|
|
||||||
StrCpy "$PROGRAMDIR" "$EXEDIR\App\${APP}"
|
|
||||||
StrCpy "$DATADIR" "$EXEDIR\Data"
|
|
||||||
Goto InitVarEnd
|
|
||||||
CheckPortableDIR:
|
|
||||||
IfFileExists "$EXEDIR\${PNAME}\App\${APP}\$PROGRAMEXE" "" CheckPortableAppsDIR
|
|
||||||
StrCpy "$PROGRAMDIR" "$EXEDIR\${PNAME}\App\${APP}"
|
|
||||||
StrCpy "$DATADIR" "$EXEDIR\${PNAME}\Data"
|
|
||||||
Goto InitVarEnd
|
|
||||||
CheckPortableAppsDIR:
|
|
||||||
IfFileExists "$EXEDIR\PortableApps\${PNAME}\App\${APP}\$PROGRAMEXE" "" CheckAppsDIR
|
|
||||||
StrCpy "$PROGRAMDIR" "$EXEDIR\PortableApps\${PNAME}\App\${APP}"
|
|
||||||
StrCpy "$DATADIR" "$EXEDIR\PortableApps\${PNAME}\Data"
|
|
||||||
Goto InitVarEnd
|
|
||||||
CheckAppsDIR:
|
|
||||||
IfFileExists "$EXEDIR\Apps\${PNAME}\${APP}\$PROGRAMEXE" "" NoDIR
|
|
||||||
StrCpy "$PROGRAMDIR" "$EXEDIR\Apps\${PNAME}\${APP}"
|
|
||||||
StrCpy "$DATADIR" "$EXEDIR\Data\${PNAME}"
|
|
||||||
Goto InitVarEnd
|
|
||||||
NoDIR:
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; No allowed pathconfiguration was found
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
MessageBox MB_OK|MB_ICONEXCLAMATION `$PROGRAMEXE was not found. Please check your configuration`
|
|
||||||
Abort ; terminate launcher
|
|
||||||
InitVarEnd: ;simly the end of the function
|
|
||||||
FunctionEnd
|
|
||||||
|
|
||||||
; **************************************************************************
|
|
||||||
; * Function: Work with registry keys or trees (backup, restore, delete)
|
|
||||||
; **************************************************************************
|
|
||||||
Function DoAction
|
|
||||||
StrCmp "$ACTIONPARAMETERS" "" AfterLoop ; if no parameters provided leave immediately
|
|
||||||
StrCpy "$R8" "0" ; reset counter
|
|
||||||
StrCpy "$R2" "$ACTION" 6 # ; get only first 6 characters of the required action
|
|
||||||
StrCmp "$R2" "Backup" "" GoOn ; backup requires existing directory
|
|
||||||
IfFileExists "$ACTIONDIRECTORY\*.*" GoOn ; create backup directory if not existant
|
|
||||||
CreateDirectory $ACTIONDIRECTORY
|
|
||||||
GoOn:
|
|
||||||
StrCpy "$R0" "$ACTIONPARAMETERS" ; copy constant to working register
|
|
||||||
Loop:
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; Get single parameter out of list
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
StrCmp "$R0" "" AfterLoop ; do not do registry parsing, when no keys given anymore
|
|
||||||
IntOp $R8 $R8 + 1 ; increase counter
|
|
||||||
${WordFind} "$R0" "||" "+01" $R9 ; save first parameter to register
|
|
||||||
${WordFind} "$R0" "||" "+02*}" $R0 ; remove first part from saved value
|
|
||||||
StrCmp "$R0" "$R9" LastLoop ; if register values are identical -> no more delimiters
|
|
||||||
Goto DoWork ; do not delete value list
|
|
||||||
LastLoop:
|
|
||||||
StrCpy "$R0" "" ; if no delimiter available anymore empty working variable
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
;Decide what to do with parameter
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
DoWork:
|
|
||||||
StrCpy "$R2" "$ACTION" "" -4 # ; get last 7 characters of action variable
|
|
||||||
!ifdef REGKEYS
|
|
||||||
StrCmp "$R2" "Keys" DoWorkRegistry ; actions should be performed on the registry
|
|
||||||
!endif
|
|
||||||
!ifdef SETTINGSFILES
|
|
||||||
StrCmp "$R2" "File" DoWorkFiles ; actions should be performed on files
|
|
||||||
!endif
|
|
||||||
!ifdef SETTINGSDIRS
|
|
||||||
StrCmp "$R2" "Dirs" DoWorkDirectory ; actions should be performed on directories
|
|
||||||
!endif
|
|
||||||
Goto Continue ; something else undefined
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; Do action on registry keys
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
!ifdef REGKEYS
|
|
||||||
DoWorkRegistry:
|
|
||||||
StrCmp "$ACTION" "BackupKeys" BackupRegistryKey ; do backup of registry key
|
|
||||||
StrCmp "$ACTION" "RestoreKeys" RestoreRegistryKey ; restore registry key, i.e. write them to the registry
|
|
||||||
StrCmp "$ACTION" "DeleteKeys" DeleteRegistryKey ; delete registry key from registry
|
|
||||||
Goto Continue ; something else undefined
|
|
||||||
BackupRegistryKey:
|
|
||||||
${registry::KeyExists} "$R9" $R7 ; check whether registry key exists
|
|
||||||
StrCmp "$R7" "0" 0 Continue ; registry key does not exist, do not save anything
|
|
||||||
${registry::SaveKey} "$R9" "$ACTIONDIRECTORY\RegKey$R8.reg" "/G=1" $R7 ; Backup registry key
|
|
||||||
Sleep 50
|
|
||||||
Goto Continue
|
|
||||||
RestoreRegistryKey:
|
|
||||||
IfFileExists "$ACTIONDIRECTORY\RegKey$R8.reg" 0 Continue ; only restore if a registry file exists
|
|
||||||
${registry::RestoreKey} "$ACTIONDIRECTORY\RegKey$R8.reg" $R7 ; Restore saved registry key
|
|
||||||
Sleep 50
|
|
||||||
Goto Continue
|
|
||||||
DeleteRegistryKey:
|
|
||||||
${registry::DeleteKey} "$R9" $R7 ; Delete registry key
|
|
||||||
Sleep 50
|
|
||||||
Goto Continue
|
|
||||||
!endif
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; Do action on files
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
!ifdef SETTINGSFILES
|
|
||||||
DoWorkFiles:
|
|
||||||
StrCmp "$ACTION" "BackupFile" BackupFile ; do backup of file
|
|
||||||
StrCmp "$ACTION" "RestoreFile" RestoreFile ; restores saved file, i.e. write it to host computer
|
|
||||||
StrCmp "$ACTION" "DeleteFile" DeleteFile ; delete file from hostcomputer
|
|
||||||
BackupFile:
|
|
||||||
IfFileExists "$R9" 0 Continue ; check whether file exists
|
|
||||||
CopyFiles "$R9" "$ACTIONDIRECTORY\File$R8.dat" ; backup file
|
|
||||||
Goto Continue
|
|
||||||
RestoreFile:
|
|
||||||
IfFileExists "$ACTIONDIRECTORY\File$R8.dat" 0 Continue ; only restore when available
|
|
||||||
CopyFiles "$ACTIONDIRECTORY\File$R8.dat" "$R9" ; restore file
|
|
||||||
Goto Continue
|
|
||||||
DeleteFile:
|
|
||||||
Delete "$R9" ; delete file
|
|
||||||
Goto Continue
|
|
||||||
!endif
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; Do action on directories
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
!ifdef SETTINGSDIRS
|
|
||||||
DoWorkDirectory:
|
|
||||||
StrCmp "$ACTION" "BackupDirs" BackupDirectory ; do backup of directory
|
|
||||||
StrCmp "$ACTION" "RestoreDirs" RestoreDirectory ; restores saved directory, i.e. write it to host computer
|
|
||||||
StrCmp "$ACTION" "DeleteDirs" DeleteDirectory ; delete directory from hostcomputer
|
|
||||||
BackupDirectory:
|
|
||||||
IfFileExists "$R9\*.*" 0 Continue ; check whether source directory exists
|
|
||||||
IfFileExists "$ACTIONDIRECTORY\Dir$R8.dat" +2 0 ; does target directory exist?
|
|
||||||
CreateDirectory "$ACTIONDIRECTORY\Dir$R8.dat" ; create target directory
|
|
||||||
CopyFiles "$R9\*.*" "$ACTIONDIRECTORY\Dir$R8.dat" ; backup directory
|
|
||||||
Goto Continue
|
|
||||||
RestoreDirectory:
|
|
||||||
IfFileExists "$ACTIONDIRECTORY\Dir$R8.dat\*.*" 0 Continue ; check whether backup exists
|
|
||||||
IfFileExists "$R9\*.*" +2 0 ; does target directory exist
|
|
||||||
CreateDirectory "$R9" ; create target directory
|
|
||||||
CopyFiles "$ACTIONDIRECTORY\Dir$R8.dat\*.*" "$R9" ; restore directories
|
|
||||||
Goto Continue
|
|
||||||
DeleteDirectory:
|
|
||||||
RMDir "/r" "$R9" ; delete directory
|
|
||||||
Goto Continue
|
|
||||||
!endif
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; End of Loop
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
Continue:
|
|
||||||
Goto Loop
|
|
||||||
AfterLoop:
|
|
||||||
FunctionEnd
|
|
||||||
|
|
||||||
; **************************************************************************
|
|
||||||
; * Function: Check whether EXE exists is launched a second time etc.
|
|
||||||
; **************************************************************************
|
|
||||||
Function CheckEXE
|
|
||||||
IfFileExists "$PROGRAMDIR\$PROGRAMEXE" FoundEXE
|
|
||||||
; Program executable not where expected
|
|
||||||
MessageBox MB_OK|MB_ICONEXCLAMATION `$PROGRAMEXE was not found. Please check your configuration!`
|
|
||||||
Abort
|
|
||||||
FoundEXE: ; Check if already running and set variable
|
|
||||||
FindProcDLL::FindProc "$PROGRAMEXE"
|
|
||||||
StrCmp $R0 "1" "" EndEXE
|
|
||||||
StrCpy $SECONDLAUNCH "true"
|
|
||||||
EndEXE:
|
|
||||||
FunctionEnd
|
|
||||||
|
|
||||||
; **************************************************************************
|
|
||||||
; * Main section
|
|
||||||
; **************************************************************************
|
|
||||||
Section "Main"
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; Initialize variables, read INI etc.
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
Call InitVariables
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; Do some EXE checking
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
Call CheckEXE
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; Display Splashscreen when available
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
!ifdef SPLASHIMAGE
|
|
||||||
StrCmp "$SPLASHSCREEN" "enabled" 0 NoSplash
|
|
||||||
InitPluginsDir
|
|
||||||
File /oname=$PLUGINSDIR\splash.bmp "${SPLASHIMAGE}"
|
|
||||||
advsplash::show 1000 600 400 -1 $PLUGINSDIR\splash
|
|
||||||
NoSplash:
|
|
||||||
!endif
|
|
||||||
StrCmp $SECONDLAUNCH "true" SimplyStartProgram
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; Backup existing, replace with saved registry keys
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
!ifdef REGKEYS
|
|
||||||
StrCpy "$ACTIONPARAMETERS" "${REGKEYS}" ; hand over parameters list
|
|
||||||
StrCpy "$ACTIONDIRECTORY" "$DATADIR\RegistryBackup" ; define where to backup keys
|
|
||||||
StrCpy "$ACTION" "BackupKeys" ; backup existing registry keys
|
|
||||||
Call DoAction ; just do it
|
|
||||||
; StrCpy "$ACTION" "DeleteKeys" ; delete existing registry keys
|
|
||||||
; Call DoAction
|
|
||||||
StrCpy "$ACTIONDIRECTORY" "$DATADIR\Registry" ; define where local keys are
|
|
||||||
StrCpy "$ACTION" "RestoreKeys" ;restore saved keys
|
|
||||||
Call DoAction ; just do it
|
|
||||||
!endif
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; Backup existing, replace with saved settings files
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
!ifdef SETTINGSFILES
|
|
||||||
StrCpy "$ACTIONPARAMETERS" "${SETTINGSFILES}" ; hand over parameters list
|
|
||||||
StrCpy "$ACTIONDIRECTORY" "$DATADIR\SettingsBackup" ; define where to save files
|
|
||||||
StrCpy "$ACTION" "BackupFile" ; define action
|
|
||||||
Call DoAction ; just do it
|
|
||||||
StrCpy "$ACTIONDIRECTORY" "$DATADIR\Settings" ; define where local files are
|
|
||||||
StrCpy "$ACTION" "RestoreFile" ; define action
|
|
||||||
Call DoAction ; just do it
|
|
||||||
!endif
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; Backup existing settings directories
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
!ifdef SETTINGSDIRS
|
|
||||||
StrCpy "$ACTIONPARAMETERS" "${SETTINGSDIRS}" ; hand over parameters list
|
|
||||||
StrCpy "$ACTIONDIRECTORY" "$DATADIR\SettingsBackup" ; define where to save directories
|
|
||||||
StrCpy "$ACTION" "BackupDirs" ; define action
|
|
||||||
Call DoAction ; just do it
|
|
||||||
StrCpy "$ACTIONDIRECTORY" "$DATADIR\Settings" ; define where local directories are
|
|
||||||
StrCpy "$ACTION" "RestoreDirs" ; define action
|
|
||||||
Call DoAction ; just do it
|
|
||||||
!endif
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; Other changes before start
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
Call Init
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; Start program
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
${GetParameters} $R0 ; obtain eventually provided commandline parameters
|
|
||||||
ExecWait "$PROGRAMDIR\$PROGRAMEXE $PROGRAMPARMS $R0" ; run program
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; Other clean up action after program has run
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
Call CleanUp
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; backup and restore or clean up settings directories
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
!ifdef SETTINGSDIRS
|
|
||||||
StrCpy "$ACTIONPARAMETERS" "${SETTINGSDIRS}" ; hand over parameters list
|
|
||||||
StrCpy "$ACTIONDIRECTORY" "$DATADIR\Settings" ; define where local directories are
|
|
||||||
StrCpy "$ACTION" "BackupDirs" ; define action
|
|
||||||
Call DoAction ; just do it
|
|
||||||
StrCpy "$ACTION" "DeleteDirs" ; delete directories on host computer
|
|
||||||
Call DoAction ; just do it
|
|
||||||
StrCpy "$ACTIONDIRECTORY" "$DATADIR\SettingsBackup" ; define where to save directories
|
|
||||||
StrCpy "$ACTION" "RestoreDirs" ; define action
|
|
||||||
Call DoAction ; just do it
|
|
||||||
!endif
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; backup and restore or clean up settings files
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
!ifdef SETTINGSFILES
|
|
||||||
StrCpy "$ACTIONPARAMETERS" "${SETTINGSFILES}" ; hand over parameters list
|
|
||||||
StrCpy "$ACTIONDIRECTORY" "$DATADIR\Settings" ; define where local files are
|
|
||||||
StrCpy "$ACTION" "BackupFile" ; define action
|
|
||||||
Call DoAction ; just do it
|
|
||||||
StrCpy "$ACTION" "DeleteFile" ; delete files on host computer
|
|
||||||
Call DoAction ; just do it
|
|
||||||
StrCpy "$ACTIONDIRECTORY" "$DATADIR\SettingsBackup" ; define where to save directories
|
|
||||||
StrCpy "$ACTION" "RestoreFile" ; define action
|
|
||||||
Call DoAction ; just do it
|
|
||||||
!endif
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; backup and restore or clean up registry keys
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
!ifdef REGKEYS
|
|
||||||
StrCpy "$ACTIONPARAMETERS" "${REGKEYS}" ; hand over parameters list
|
|
||||||
StrCpy "$ACTIONDIRECTORY" "$DATADIR\Registry" ; define where local keys are
|
|
||||||
StrCpy "$ACTION" "BackupKeys" ; backup existing registry keys
|
|
||||||
Call DoAction ; just do it
|
|
||||||
StrCpy "$ACTION" "DeleteKeys" ; delete registry keys on host computer
|
|
||||||
Call DoAction ; just do it
|
|
||||||
sleep 500 ; let deletion of registry keys finish
|
|
||||||
StrCpy "$ACTIONDIRECTORY" "$DATADIR\RegistryBackup" ; define where to backup keys
|
|
||||||
StrCpy "$ACTION" "RestoreKeys" ;restore saved keys
|
|
||||||
Call DoAction ; just do it
|
|
||||||
sleep 1000 ; let registry writing finish (necessary before deleting backup file)
|
|
||||||
!endif
|
|
||||||
${registry::Unload}
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; remove saved backups
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
RMDir "/r" "$DATADIR\SettingsBackup"
|
|
||||||
RMDir "/r" "$DATADIR\RegistryBackup"
|
|
||||||
Goto EndOfCode
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
; run application directly without doing anything else, as it is already running
|
|
||||||
; --------------------------------------------------------------------------
|
|
||||||
SimplyStartProgram:
|
|
||||||
${GetParameters} $R0 ; obtain eventually provided commandline parameters
|
|
||||||
Exec "$PROGRAMDIR\$PROGRAMEXE $PROGRAMPARMS $R0" ; run program
|
|
||||||
${registry::Unload}
|
|
||||||
EndOfCode:
|
|
||||||
SectionEnd
|
|
Binary file not shown.
@ -1,43 +0,0 @@
|
|||||||
HeidiSQL Portable Launcher 1.0.0.0
|
|
||||||
==================================
|
|
||||||
|
|
||||||
Website: http://www.heidisql.com/
|
|
||||||
|
|
||||||
This software is OSI Certified Open Source Software.
|
|
||||||
OSI Certified is a certification mark of the Open Source Initiative.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
|
|
||||||
|
|
||||||
ABOUT HEIDISQL PORTABLE
|
|
||||||
=======================
|
|
||||||
The HeidiSQL Portable Launcher allows you to run HeidiSQL from a removable drive whose letter changes as you move it to another computer. The program can be entirely self-contained on the drive and then used on any Windows computer.
|
|
||||||
The HeidiSQL Portable Launcher is based on template created by Karl Loncarek and modified by Bruno Soares Pasin.
|
|
||||||
|
|
||||||
|
|
||||||
LICENSE
|
|
||||||
=======
|
|
||||||
This code is released under the GPL. The full code is included with this package as HeidiSQLPortable.nsi.
|
|
||||||
|
|
||||||
|
|
||||||
INSTALLATION / DIRECTORY STRUCTURE
|
|
||||||
==================================
|
|
||||||
By default, the program expects one of these directory structures:
|
|
||||||
|
|
||||||
-\ <--- Directory with HeidiSQlPortable.exe
|
|
||||||
+\App\
|
|
||||||
+\HeidiSQL\
|
|
||||||
+\Data\
|
|
||||||
+\Registry\
|
|
@ -1,75 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="744.09448819"
|
|
||||||
height="1052.3622047"
|
|
||||||
id="svg2"
|
|
||||||
sodipodi:version="0.32"
|
|
||||||
inkscape:version="0.46"
|
|
||||||
sodipodi:docname="usb.svg"
|
|
||||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
|
||||||
<defs
|
|
||||||
id="defs4">
|
|
||||||
<inkscape:perspective
|
|
||||||
sodipodi:type="inkscape:persp3d"
|
|
||||||
inkscape:vp_x="0 : 526.18109 : 1"
|
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
|
||||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
|
||||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
|
||||||
id="perspective10" />
|
|
||||||
<inkscape:perspective
|
|
||||||
id="perspective2390"
|
|
||||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
|
||||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
|
||||||
inkscape:vp_x="0 : 526.18109 : 1"
|
|
||||||
sodipodi:type="inkscape:persp3d" />
|
|
||||||
</defs>
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#000000"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
gridtolerance="10000"
|
|
||||||
guidetolerance="10"
|
|
||||||
objecttolerance="10"
|
|
||||||
inkscape:pageopacity="1"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="0.50362889"
|
|
||||||
inkscape:cx="372.04724"
|
|
||||||
inkscape:cy="526.18109"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:current-layer="layer1"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:window-width="1014"
|
|
||||||
inkscape:window-height="725"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="0" />
|
|
||||||
<metadata
|
|
||||||
id="metadata7">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer1">
|
|
||||||
<path
|
|
||||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
d="M 372.04724,291.39307 L 322.49075,373.71819 L 353.80658,374.04104 L 353.80658,578.56248 L 317.32525,542.72683 L 318.61662,515.93081 C 327.71033,509.28034 333.62885,498.51146 333.62885,486.39062 C 333.62885,466.21563 317.32251,449.74782 297.14752,449.74787 C 276.97253,449.74787 260.50477,466.21563 260.50477,486.39062 C 260.50477,502.29643 270.84718,515.75405 285.04089,520.77347 L 284.07236,551.44361 L 353.80658,625.69764 L 353.80658,648.61954 C 330.71293,656.13544 313.93539,677.75109 313.93539,703.34154 C 313.93539,735.15594 339.74857,760.96907 371.56298,760.96912 C 403.37738,760.96912 429.19057,735.15594 429.19057,703.34154 C 429.19057,678.11882 413.02808,656.75029 390.44933,648.94239 L 390.44933,582.27518 L 461.47493,506.89119 L 462.12061,464.7601 L 483.58972,464.7601 L 483.58972,392.60455 L 411.43417,392.60455 L 411.43417,464.7601 L 429.51341,464.7601 L 429.99767,496.39877 L 390.44933,535.14001 L 390.44933,374.5253 L 421.76516,374.84815 L 372.04724,291.39307 z"
|
|
||||||
id="rect2400" />
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 3.3 KiB |
1385
out/portable.nsi
1385
out/portable.nsi
File diff suppressed because it is too large
Load Diff
@ -292,7 +292,7 @@ begin
|
|||||||
|
|
||||||
i := 0;
|
i := 0;
|
||||||
NewName := 'Unnamed';
|
NewName := 'Unnamed';
|
||||||
while MainReg.KeyExists(REGPATH + REGKEY_SESSIONS + NewName) do begin
|
while MainReg.KeyExists(RegPath + REGKEY_SESSIONS + NewName) do begin
|
||||||
inc(i);
|
inc(i);
|
||||||
NewName := 'Unnamed-' + IntToStr(i);
|
NewName := 'Unnamed-' + IntToStr(i);
|
||||||
end;
|
end;
|
||||||
@ -314,7 +314,7 @@ var
|
|||||||
begin
|
begin
|
||||||
if MessageDlg('Delete session "' + SelectedSession + '" ?', mtConfirmation, [mbYes, mbCancel], 0) = mrYes then
|
if MessageDlg('Delete session "' + SelectedSession + '" ?', mtConfirmation, [mbYes, mbCancel], 0) = mrYes then
|
||||||
begin
|
begin
|
||||||
SessionKey := REGPATH + REGKEY_SESSIONS + SelectedSession;
|
SessionKey := RegPath + REGKEY_SESSIONS + SelectedSession;
|
||||||
if MainReg.KeyExists(SessionKey) then
|
if MainReg.KeyExists(SessionKey) then
|
||||||
MainReg.DeleteKey(SessionKey);
|
MainReg.DeleteKey(SessionKey);
|
||||||
FSessionNames.Delete(FSessionNames.IndexOf(SelectedSession));
|
FSessionNames.Delete(FSessionNames.IndexOf(SelectedSession));
|
||||||
@ -345,7 +345,7 @@ end;
|
|||||||
procedure Tconnform.RefreshSessionList;
|
procedure Tconnform.RefreshSessionList;
|
||||||
begin
|
begin
|
||||||
// Refresh list of session names
|
// Refresh list of session names
|
||||||
MainReg.OpenKey(REGPATH + REGKEY_SESSIONS, True);
|
MainReg.OpenKey(RegPath + REGKEY_SESSIONS, True);
|
||||||
FSessionNames.BeginUpdate;
|
FSessionNames.BeginUpdate;
|
||||||
MainReg.GetKeyNames(FSessionNames);
|
MainReg.GetKeyNames(FSessionNames);
|
||||||
FSessionNames.EndUpdate;
|
FSessionNames.EndUpdate;
|
||||||
@ -398,7 +398,7 @@ begin
|
|||||||
OpenRegistry;
|
OpenRegistry;
|
||||||
SessionFocused := Assigned(Node);
|
SessionFocused := Assigned(Node);
|
||||||
if SessionFocused then begin
|
if SessionFocused then begin
|
||||||
SessionExists := MainReg.KeyExists(REGPATH + REGKEY_SESSIONS + SelectedSession);
|
SessionExists := MainReg.KeyExists(RegPath + REGKEY_SESSIONS + SelectedSession);
|
||||||
if SessionExists then begin
|
if SessionExists then begin
|
||||||
OpenRegistry(SelectedSession);
|
OpenRegistry(SelectedSession);
|
||||||
FOrgNetType := GetRegValue(REGNAME_NETTYPE, DEFAULT_NETTYPE, SelectedSession);
|
FOrgNetType := GetRegValue(REGNAME_NETTYPE, DEFAULT_NETTYPE, SelectedSession);
|
||||||
@ -470,7 +470,7 @@ begin
|
|||||||
lblCounterRight.Enabled := False;
|
lblCounterRight.Enabled := False;
|
||||||
|
|
||||||
if (not Assigned(ListSessions.FocusedNode))
|
if (not Assigned(ListSessions.FocusedNode))
|
||||||
or (not MainReg.KeyExists(REGPATH + REGKEY_SESSIONS + SelectedSession)) then
|
or (not MainReg.KeyExists(RegPath + REGKEY_SESSIONS + SelectedSession)) then
|
||||||
Exit;
|
Exit;
|
||||||
|
|
||||||
DummyDate := StrToDateTime('2000-01-01');
|
DummyDate := StrToDateTime('2000-01-01');
|
||||||
@ -517,9 +517,9 @@ begin
|
|||||||
MessageDLG('Session "'+NewText+'" already exists!', mtError, [mbCancel], 0);
|
MessageDLG('Session "'+NewText+'" already exists!', mtError, [mbCancel], 0);
|
||||||
NewText := SelectedSession;
|
NewText := SelectedSession;
|
||||||
end else begin
|
end else begin
|
||||||
SessionKey := REGPATH + REGKEY_SESSIONS + SelectedSession;
|
SessionKey := RegPath + REGKEY_SESSIONS + SelectedSession;
|
||||||
if MainReg.KeyExists(SessionKey) then
|
if MainReg.KeyExists(SessionKey) then
|
||||||
MainReg.MoveKey(SessionKey, REGPATH + REGKEY_SESSIONS + NewText, true);
|
MainReg.MoveKey(SessionKey, RegPath + REGKEY_SESSIONS + NewText, true);
|
||||||
// Also fix internal session name in main form, which gets used to store e.g. "lastuseddb" later
|
// Also fix internal session name in main form, which gets used to store e.g. "lastuseddb" later
|
||||||
if Mainform.SessionName = SelectedSession then begin
|
if Mainform.SessionName = SelectedSession then begin
|
||||||
Mainform.SessionName := NewText;
|
Mainform.SessionName := NewText;
|
||||||
|
@ -21,7 +21,6 @@ const
|
|||||||
// General things
|
// General things
|
||||||
APPNAME = 'HeidiSQL';
|
APPNAME = 'HeidiSQL';
|
||||||
APPDOMAIN = 'http://www.heidisql.com/';
|
APPDOMAIN = 'http://www.heidisql.com/';
|
||||||
REGPATH = '\Software\' + APPNAME + '\';
|
|
||||||
REGKEY_SESSIONS = 'Servers\';
|
REGKEY_SESSIONS = 'Servers\';
|
||||||
// Some unique char, used to separate e.g. selected columns in registry
|
// Some unique char, used to separate e.g. selected columns in registry
|
||||||
DELIM = '|';
|
DELIM = '|';
|
||||||
|
@ -250,9 +250,11 @@ type
|
|||||||
function KeyPressed(Code: Integer): Boolean;
|
function KeyPressed(Code: Integer): Boolean;
|
||||||
function GeneratePassword(Len: Integer): String;
|
function GeneratePassword(Len: Integer): String;
|
||||||
procedure InvalidateVT(VT: TVirtualStringTree; RefreshTag: Integer; ImmediateRepaint: Boolean);
|
procedure InvalidateVT(VT: TVirtualStringTree; RefreshTag: Integer; ImmediateRepaint: Boolean);
|
||||||
|
procedure HandlePortableSettings(StartupMode: Boolean);
|
||||||
|
|
||||||
var
|
var
|
||||||
MainReg: TRegistry;
|
MainReg: TRegistry;
|
||||||
|
RegPath: String = '\Software\' + APPNAME + '\';
|
||||||
MutexHandle: THandle = 0;
|
MutexHandle: THandle = 0;
|
||||||
dbgCounter: Integer = 0;
|
dbgCounter: Integer = 0;
|
||||||
DecimalSeparatorSystemdefault: Char;
|
DecimalSeparatorSystemdefault: Char;
|
||||||
@ -2593,9 +2595,11 @@ procedure OpenRegistry(Session: String = '');
|
|||||||
var
|
var
|
||||||
folder : String;
|
folder : String;
|
||||||
begin
|
begin
|
||||||
if MainReg = nil then
|
if MainReg = nil then begin
|
||||||
MainReg := TRegistry.Create;
|
MainReg := TRegistry.Create;
|
||||||
folder := REGPATH;
|
HandlePortableSettings(True);
|
||||||
|
end;
|
||||||
|
folder := RegPath;
|
||||||
if Session <> '' then
|
if Session <> '' then
|
||||||
folder := folder + REGKEY_SESSIONS + Session;
|
folder := folder + REGKEY_SESSIONS + Session;
|
||||||
if MainReg.CurrentPath <> folder then
|
if MainReg.CurrentPath <> folder then
|
||||||
@ -2619,7 +2623,7 @@ end;
|
|||||||
Read a boolean preference value from registry
|
Read a boolean preference value from registry
|
||||||
@param string Name of the value
|
@param string Name of the value
|
||||||
@param boolean Default-value to return if valueName was not found
|
@param boolean Default-value to return if valueName was not found
|
||||||
@param string Subkey of REGPATH where to search for the value
|
@param string Subkey of RegPath where to search for the value
|
||||||
}
|
}
|
||||||
function GetRegValue( valueName: String; defaultValue: Boolean; Session: String = '' ) : Boolean;
|
function GetRegValue( valueName: String; defaultValue: Boolean; Session: String = '' ) : Boolean;
|
||||||
begin
|
begin
|
||||||
@ -3456,6 +3460,108 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure HandlePortableSettings(StartupMode: Boolean);
|
||||||
|
var
|
||||||
|
Content, FileName, Name, Value, KeyPath: String;
|
||||||
|
Lines, Segments: TStringList;
|
||||||
|
i: Integer;
|
||||||
|
DataType: TRegDataType;
|
||||||
|
const
|
||||||
|
Chr10Replacement = '<}}}>';
|
||||||
|
Chr13Replacement = '<{{{>';
|
||||||
|
Delimiter = '<|||>';
|
||||||
|
|
||||||
|
procedure ReadKeyToContent(Path: String);
|
||||||
|
var
|
||||||
|
Names: TStringList;
|
||||||
|
i: Integer;
|
||||||
|
SubPath: String;
|
||||||
|
begin
|
||||||
|
MainReg.OpenKeyReadOnly(Path);
|
||||||
|
SubPath := Copy(Path, Length(RegPath)+1, MaxInt);
|
||||||
|
Names := TStringList.Create;
|
||||||
|
MainReg.GetValueNames(Names);
|
||||||
|
for i:=0 to Names.Count-1 do begin
|
||||||
|
DataType := MainReg.GetDataType(Names[i]);
|
||||||
|
Content := Content +
|
||||||
|
SubPath + Names[i] + Delimiter +
|
||||||
|
IntToStr(Integer(DataType)) + Delimiter;
|
||||||
|
case DataType of
|
||||||
|
rdString: begin
|
||||||
|
Value := MainReg.ReadString(Names[i]);
|
||||||
|
Value := StringReplace(Value, #13, Chr13Replacement, [rfReplaceAll]);
|
||||||
|
Value := StringReplace(Value, #10, Chr10Replacement, [rfReplaceAll]);
|
||||||
|
end;
|
||||||
|
rdInteger:
|
||||||
|
Value := IntToStr(MainReg.ReadInteger(Names[i]));
|
||||||
|
rdBinary, rdUnknown, rdExpandString:
|
||||||
|
MessageDlg(Names[i]+' has an unsupported data type.', mtError, [mbOK], 0);
|
||||||
|
end;
|
||||||
|
Content := Content + Value + CRLF;
|
||||||
|
end;
|
||||||
|
Names.Clear;
|
||||||
|
MainReg.GetKeyNames(Names);
|
||||||
|
for i:=0 to Names.Count-1 do
|
||||||
|
ReadKeyToContent(Path + Names[i] + '\');
|
||||||
|
Names.Free;
|
||||||
|
end;
|
||||||
|
begin
|
||||||
|
// Export registry keys and values into textfile, for portable reasons
|
||||||
|
FileName := ExtractFilePath(ParamStr(0)) + 'portable_settings.txt';
|
||||||
|
if not FileExists(FileName) then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
// Open the right key
|
||||||
|
if StartupMode then
|
||||||
|
RegPath := '\Software\' + APPNAME + ' Portable '+IntToStr(GetCurrentThreadId)+'\';
|
||||||
|
|
||||||
|
Screen.Cursor := crHourGlass;
|
||||||
|
try
|
||||||
|
if StartupMode then begin
|
||||||
|
Content := ReadTextfile(FileName);
|
||||||
|
Lines := Explode(CRLF, Content);
|
||||||
|
for i:=0 to Lines.Count-1 do begin
|
||||||
|
// Each line has 3 segments: reg path | data type | value
|
||||||
|
Segments := Explode(Delimiter, Lines[i]);
|
||||||
|
KeyPath := RegPath + ExtractFilePath(Segments[0]);
|
||||||
|
Name := ExtractFileName(Segments[0]);
|
||||||
|
DataType := TRegDataType(StrToInt(Segments[1]));
|
||||||
|
MainReg.OpenKey(KeyPath, True);
|
||||||
|
if MainReg.ValueExists(Name) then
|
||||||
|
Continue; // Don't touch value if already there
|
||||||
|
Value := '';
|
||||||
|
if Segments.Count >= 3 then
|
||||||
|
Value := Segments[2];
|
||||||
|
case DataType of
|
||||||
|
rdString: begin
|
||||||
|
Value := StringReplace(Value, Chr13Replacement, #13, [rfReplaceAll]);
|
||||||
|
Value := StringReplace(Value, Chr10Replacement, #10, [rfReplaceAll]);
|
||||||
|
MainReg.WriteString(Name, Value);
|
||||||
|
end;
|
||||||
|
rdInteger:
|
||||||
|
MainReg.WriteInteger(Name, MakeInt(Value));
|
||||||
|
rdBinary, rdUnknown, rdExpandString:
|
||||||
|
MessageDlg(Name+' has an unsupported data type.', mtError, [mbOK], 0);
|
||||||
|
end;
|
||||||
|
Segments.Free;
|
||||||
|
end;
|
||||||
|
Lines.Free;
|
||||||
|
end else begin
|
||||||
|
// Application closes: Recursively read values in keys and their subkeys into textfile
|
||||||
|
ReadKeyToContent(RegPath);
|
||||||
|
SaveUnicodeFile(FileName, Content);
|
||||||
|
MainReg.CloseKey;
|
||||||
|
MainReg.DeleteKey(RegPath);
|
||||||
|
end;
|
||||||
|
except
|
||||||
|
On E:Exception do
|
||||||
|
MessageDlg(E.Message, mtError, [mbOK], 0);
|
||||||
|
end;
|
||||||
|
Screen.Cursor := crDefault;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
@ -1176,6 +1176,8 @@ begin
|
|||||||
deletefile(filename+'bmp');
|
deletefile(filename+'bmp');
|
||||||
if MainReg <> nil then begin
|
if MainReg <> nil then begin
|
||||||
MainReg.CloseKey;
|
MainReg.CloseKey;
|
||||||
|
// Export settings into textfile in portable mode.
|
||||||
|
HandlePortableSettings(False);
|
||||||
MainReg.Free;
|
MainReg.Free;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
@ -186,7 +186,7 @@ begin
|
|||||||
comboExportOutputTarget.Text := '';
|
comboExportOutputTarget.Text := '';
|
||||||
// Add session names from registry
|
// Add session names from registry
|
||||||
SessionNames := TStringList.Create;
|
SessionNames := TStringList.Create;
|
||||||
MainReg.OpenKey(REGPATH + REGKEY_SESSIONS, True);
|
MainReg.OpenKey(RegPath + REGKEY_SESSIONS, True);
|
||||||
MainReg.GetKeyNames(SessionNames);
|
MainReg.GetKeyNames(SessionNames);
|
||||||
for i:=0 to SessionNames.Count-1 do begin
|
for i:=0 to SessionNames.Count-1 do begin
|
||||||
if SessionNames[i] <> Mainform.SessionName then
|
if SessionNames[i] <> Mainform.SessionName then
|
||||||
|
Reference in New Issue
Block a user