From eb067165758562256c75a2a710ae787c3fac70f3 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Thu, 2 Dec 2021 18:11:46 +0000 Subject: [PATCH] --- build-release.bat | 117 ++++++++++++++++++++++++ buildWinX64SelfContainedRelease.bat | 15 ++- dist/assets/lan-install-config.json | 8 ++ dist/install/windows/x64/iis.iss | 37 ++------ dist/install/windows/x64/lan.iss | 37 ++------ dist/install/windows/x64/standalone.iss | 31 ++----- 6 files changed, 166 insertions(+), 79 deletions(-) create mode 100644 build-release.bat create mode 100644 dist/assets/lan-install-config.json diff --git a/build-release.bat b/build-release.bat new file mode 100644 index 00000000..c3b9b05f --- /dev/null +++ b/build-release.bat @@ -0,0 +1,117 @@ +set m=Unknown error + +@echo ****************** CLEAN CLIENT/DOCS OUTPUT FOLDERS ********** +rmdir c:\data\code\raven\server\AyaNova\wwwroot /s/q +mkdir c:\data\code\raven\server\AyaNova\wwwroot + + +@echo ******************** BUILD DOCS ****************************** +cd c:\data\code\raven\docs\8.0\ayanova +mkdocs build +IF %ERRORLEVEL% NEQ 0 ( +set m=DOCS FAILED TO BUILD +goto FAIL +) + + +@echo ******************** BUILD CLIENT **************************** +cd c:\data\code\raven-client\ayanova +call npm run build +IF %ERRORLEVEL% NEQ 0 ( +set m=CLIENT FAILED TO BUILD +goto FAIL +) +xcopy c:\data\code\raven-client\ayanova\dist\* C:\data\code\raven\server\AyaNova\wwwroot\ /e +IF %ERRORLEVEL% NEQ 0 ( +set m=CLIENT FAILED TO COPY +goto FAIL +) + +@echo ******************** BUILD LINUX DOCKER ********************** +rmdir C:\data\code\raven\dist\docker\linux-x64\ayanovadocker\files /s/q +mkdir C:\data\code\raven\dist\docker\linux-x64\ayanovadocker\files +cd C:\data\code\raven\server\AyaNova\ +dotnet publish -o C:\data\code\raven\dist\docker\linux-x64\ayanovadocker\files\ -c Release -r linux-x64 --no-self-contained +IF %ERRORLEVEL% NEQ 0 ( +set m=BUILD LINUX DOCKER FAILED +goto FAIL +) + +@echo ************** BUILD WINDOWS STANDALONE SERVER *********************** +rmdir C:\data\code\raven\dist\win-x64\ayanova\standalone /s/q +mkdir C:\data\code\raven\dist\win-x64\ayanova\standalone +cd C:\data\code\raven\server\AyaNova\ +dotnet publish -c Release -o C:\data\code\raven\dist\win-x64\ayanova\standalone\ -r win-x64 --self-contained +IF %ERRORLEVEL% NEQ 0 ( +set m=BUILD WINDOWS STANDALONE FAILED +goto FAIL +) + +@echo ******** BUILD WINDOWS FRAMEWORK-DEPENDENT SERVER ************ +rmdir C:\data\code\raven\dist\win-x64\ayanova\framework-dependent /s/q +mkdir C:\data\code\raven\dist\win-x64\ayanova\framework-dependent +cd C:\data\code\raven\server\AyaNova\ +dotnet publish -c Release -o C:\data\code\raven\dist\win-x64\ayanova\framework-dependent\ -r win-x64 --no-self-contained +IF %ERRORLEVEL% NEQ 0 ( +set m=BUILD WINDOWS FRAMEWORK-DEPENDENT FAILED +goto FAIL +) + +@echo ******************** BUILD LAUNCHER ************************** +rmdir C:\data\code\raven\dist\win-x64\launcher /s/q +mkdir C:\data\code\raven\dist\win-x64\launcher +cd C:\data\code\raven-launcher\ +dotnet publish -c Release -o C:\data\code\raven\dist\win-x64\launcher\ -r win-x64 --self-contained +IF %ERRORLEVEL% NEQ 0 ( +set m=BUILD LAUNCHER FAILED +goto FAIL +) + +@echo ************* BUILD STANDALONE INSTALLER ********************* +"C:\Program Files (x86)\Inno Setup 6\ISCC.exe" C:\data\code\raven\dist\install\windows\x64\standalone.iss +IF %ERRORLEVEL% NEQ 0 ( +set m=BUILD STANDALONE INSTALLER FAILED +goto FAIL +) + +@echo ************* BUILD LAN INSTALLER ********************* +"C:\Program Files (x86)\Inno Setup 6\ISCC.exe" C:\data\code\raven\dist\install\windows\x64\lan.iss +IF %ERRORLEVEL% NEQ 0 ( +set m=BUILD LAN INSTALLER FAILED +goto FAIL +) + +@echo ************* BUILD IIS INSTALLER ********************* +"C:\Program Files (x86)\Inno Setup 6\ISCC.exe" C:\data\code\raven\dist\install\windows\x64\iis.iss +IF %ERRORLEVEL% NEQ 0 ( +set m=BUILD IIS INSTALLER FAILED +goto FAIL +) + +::Completed processing without error +goto OK + +::------------------------ +:FAIL +echo. +echo. +echo. +echo. +echo. +echo Error: +echo %m% +pause +goto DONE + +::------------------------ +:OK +echo. +echo. +echo. +echo. +echo. +@echo Completed without error +pause + + +:DONE \ No newline at end of file diff --git a/buildWinX64SelfContainedRelease.bat b/buildWinX64SelfContainedRelease.bat index 30ec7ec3..33182c5c 100644 --- a/buildWinX64SelfContainedRelease.bat +++ b/buildWinX64SelfContainedRelease.bat @@ -1,11 +1,18 @@ @echo ************************************************************** -@echo ******************** BUILD SERVER **************************** +@echo ************** BUILD STANDALONE SERVER *********************** @echo ************************************************************** -rmdir C:\data\code\raven\dist\win-x64\ayanova /s/q -mkdir C:\data\code\raven\dist\win-x64\ayanova +rmdir C:\data\code\raven\dist\win-x64\ayanova\standalone /s/q +mkdir C:\data\code\raven\dist\win-x64\ayanova\standalone cd C:\data\code\raven\server\AyaNova\ -dotnet publish -c Release -o C:\data\code\raven\dist\win-x64\ayanova\ -r win-x64 --self-contained +dotnet publish -c Release -o C:\data\code\raven\dist\win-x64\ayanova\standalone\ -r win-x64 --self-contained +@echo ************************************************************** +@echo ************** BUILD FRAMEWORK-DEPENDENT SERVER *********************** +@echo ************************************************************** +rmdir C:\data\code\raven\dist\win-x64\ayanova\framework-dependent /s/q +mkdir C:\data\code\raven\dist\win-x64\ayanova\framework-dependent +cd C:\data\code\raven\server\AyaNova\ +dotnet publish -c Release -o C:\data\code\raven\dist\win-x64\ayanova\framework-dependent\ -r win-x64 --no-self-contained @echo ************************************************************** diff --git a/dist/assets/lan-install-config.json b/dist/assets/lan-install-config.json new file mode 100644 index 00000000..46b13858 --- /dev/null +++ b/dist/assets/lan-install-config.json @@ -0,0 +1,8 @@ +{ + "AYANOVA_USE_URLS": "http://*:7575", + "AYANOVA_DB_CONNECTION":"Server=localhost;Username=postgres;Password=mypasswordforpostgres;Database=AyaNova;", + "AYANOVA_DEFAULT_TRANSLATION":"en", + "AYANOVA_BACKUP_PG_DUMP_PATH":"postgres\\bin\\", + "AYANOVA_DATA_PATH":"%ProgramData%\\ayanova", + "AYANOVA_LOG_LEVEL": "Info" +} \ No newline at end of file diff --git a/dist/install/windows/x64/iis.iss b/dist/install/windows/x64/iis.iss index c2e11517..d9dafbb0 100644 --- a/dist/install/windows/x64/iis.iss +++ b/dist/install/windows/x64/iis.iss @@ -1,12 +1,9 @@ -; Basic preconfigured ayanova installer for super easy config -; single user or lan only, built in postgres -; external to lan requires different config +; IIS install for internal / external use #define MyAppName "AyaNova" #define MyAppVersion "8.0.0-beta.1" #define MyAppPublisher "Ground Zero Tech-Works, Inc." #define MyAppURL "https://ayanova.com/" -#define MyAppExeName "AyaNova.exe" #define MyAppLauncherExeName "ayanova-launcher.exe" @@ -24,10 +21,8 @@ AppUpdatesURL={#MyAppURL} DefaultDirName={autopf}\ayanova DisableProgramGroupPage=yes LicenseFile=C:\data\code\raven\dist\assets\license.rtf -; Uncomment the following line to run in non administrative install mode (install for current user only.) -;PrivilegesRequired=lowest -OutputDir=C:\data\code\raven\dist\install\windows-pg-standalone\output -OutputBaseFilename=ayanova-single-setup +OutputDir=C:\data\code\raven\dist\install\windows\x64\output +OutputBaseFilename=ayanova-iis-setup SetupIconFile=C:\data\code\raven\graphics\logo.ico Compression=lzma SolidCompression=yes @@ -35,22 +30,13 @@ WizardStyle=modern ArchitecturesInstallIn64BitMode=x64 ArchitecturesAllowed=x64 -;[Languages] -;Name: "english"; MessagesFile: "compiler:Default.isl" -;Name: "french"; MessagesFile: "compiler:Languages\French.isl" -;Name: "german"; MessagesFile: "compiler:Languages\German.isl" -;Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] -Source: "C:\data\code\raven\dist\win-x64\ayanova\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion -Source: "C:\data\code\raven\dist\win-x64\ayanova\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "C:\data\code\raven\dist\win-x64\launcher\config.json"; DestDir: "{app}"; Flags: ignoreversion confirmoverwrite -Source: "C:\data\code\raven\dist\win-x64\launcher\*"; DestDir: "{app}\launcher"; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "C:\data\code\raven\dist\win-x64\postgres\*"; DestDir: "{app}\local-postgres"; Permissions: users-modify;Flags: ignoreversion recursesubdirs createallsubdirs -Source: "C:\data\code\raven\dist\win-x64\data\database\*"; DestDir: "{commonappdata}\ayanova\database"; Permissions: users-modify; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "C:\data\code\raven\dist\win-x64\ayanova\framework-dependent\*"; DestDir: "{app}";Flags: ignoreversion recursesubdirs createallsubdirs +Source: "C:\data\code\raven\dist\assets\lan-install-config.json"; DestDir: "{app}"; Flags: ignoreversion confirmoverwrite [Dirs] Name: "{app}\.local-chromium";Permissions: users-modify;Flags: uninsalwaysuninstall @@ -62,23 +48,20 @@ Name: "{commonappdata}\ayanova\logs";Permissions: users-modify; Type: filesandordirs; Name: "{app}\.local-chromium\*" [Icons] -Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\launcher\{#MyAppLauncherExeName}"; -;IconFilename: "{app}\logo.ico" -Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\launcher\{#MyAppLauncherExeName}"; Tasks: desktopicon +Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\launcher\ayanova-launcher.exe"; +Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\launcher\ayanova-launcher.exe"; Tasks: desktopicon [Run] -Filename: "{app}\launcher\{#MyAppLauncherExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent +Filename: "{app}\launcher\ayanova-launcher.exe"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent [Code] procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin if CurUninstallStep = usPostUninstall then begin - if MsgBox('Do you want to delete the AyaNova database?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then - //this is the msg that will display after uninstall,change is as you prefer + if MsgBox('Do you want to delete all AyaNova database and attachment files?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then begin - if MsgBox('Are you sure you want to **PERMANENTLY** delete the database files?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then - //this is the msg that will display after uninstall,change is as you prefer + if MsgBox('Are you sure you want to **PERMANENTLY** delete all AyaNova database and attachment files?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then begin DelTree(ExpandConstant('{commonappdata}\ayanova'), True, True, True); end; diff --git a/dist/install/windows/x64/lan.iss b/dist/install/windows/x64/lan.iss index c2e11517..6fe76b89 100644 --- a/dist/install/windows/x64/lan.iss +++ b/dist/install/windows/x64/lan.iss @@ -1,12 +1,9 @@ -; Basic preconfigured ayanova installer for super easy config -; single user or lan only, built in postgres -; external to lan requires different config +; LAN install for internal network use only #define MyAppName "AyaNova" #define MyAppVersion "8.0.0-beta.1" #define MyAppPublisher "Ground Zero Tech-Works, Inc." #define MyAppURL "https://ayanova.com/" -#define MyAppExeName "AyaNova.exe" #define MyAppLauncherExeName "ayanova-launcher.exe" @@ -24,10 +21,8 @@ AppUpdatesURL={#MyAppURL} DefaultDirName={autopf}\ayanova DisableProgramGroupPage=yes LicenseFile=C:\data\code\raven\dist\assets\license.rtf -; Uncomment the following line to run in non administrative install mode (install for current user only.) -;PrivilegesRequired=lowest -OutputDir=C:\data\code\raven\dist\install\windows-pg-standalone\output -OutputBaseFilename=ayanova-single-setup +OutputDir=C:\data\code\raven\dist\install\windows\x64\output +OutputBaseFilename=ayanova-lan-setup SetupIconFile=C:\data\code\raven\graphics\logo.ico Compression=lzma SolidCompression=yes @@ -35,22 +30,13 @@ WizardStyle=modern ArchitecturesInstallIn64BitMode=x64 ArchitecturesAllowed=x64 -;[Languages] -;Name: "english"; MessagesFile: "compiler:Default.isl" -;Name: "french"; MessagesFile: "compiler:Languages\French.isl" -;Name: "german"; MessagesFile: "compiler:Languages\German.isl" -;Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] -Source: "C:\data\code\raven\dist\win-x64\ayanova\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion -Source: "C:\data\code\raven\dist\win-x64\ayanova\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "C:\data\code\raven\dist\win-x64\launcher\config.json"; DestDir: "{app}"; Flags: ignoreversion confirmoverwrite -Source: "C:\data\code\raven\dist\win-x64\launcher\*"; DestDir: "{app}\launcher"; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "C:\data\code\raven\dist\win-x64\postgres\*"; DestDir: "{app}\local-postgres"; Permissions: users-modify;Flags: ignoreversion recursesubdirs createallsubdirs -Source: "C:\data\code\raven\dist\win-x64\data\database\*"; DestDir: "{commonappdata}\ayanova\database"; Permissions: users-modify; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "C:\data\code\raven\dist\win-x64\ayanova\framework-dependent\*"; DestDir: "{app}";Flags: ignoreversion recursesubdirs createallsubdirs +Source: "C:\data\code\raven\dist\assets\lan-install-config.json"; DestDir: "{app}"; Flags: ignoreversion confirmoverwrite [Dirs] Name: "{app}\.local-chromium";Permissions: users-modify;Flags: uninsalwaysuninstall @@ -62,23 +48,20 @@ Name: "{commonappdata}\ayanova\logs";Permissions: users-modify; Type: filesandordirs; Name: "{app}\.local-chromium\*" [Icons] -Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\launcher\{#MyAppLauncherExeName}"; -;IconFilename: "{app}\logo.ico" -Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\launcher\{#MyAppLauncherExeName}"; Tasks: desktopicon +Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\launcher\ayanova-launcher.exe"; +Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\launcher\ayanova-launcher.exe"; Tasks: desktopicon [Run] -Filename: "{app}\launcher\{#MyAppLauncherExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent +Filename: "{app}\launcher\ayanova-launcher.exe"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent [Code] procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin if CurUninstallStep = usPostUninstall then begin - if MsgBox('Do you want to delete the AyaNova database?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then - //this is the msg that will display after uninstall,change is as you prefer + if MsgBox('Do you want to delete all AyaNova database and attachment files?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then begin - if MsgBox('Are you sure you want to **PERMANENTLY** delete the database files?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then - //this is the msg that will display after uninstall,change is as you prefer + if MsgBox('Are you sure you want to **PERMANENTLY** delete all AyaNova database and attachment files?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then begin DelTree(ExpandConstant('{commonappdata}\ayanova'), True, True, True); end; diff --git a/dist/install/windows/x64/standalone.iss b/dist/install/windows/x64/standalone.iss index c2e11517..68d4c779 100644 --- a/dist/install/windows/x64/standalone.iss +++ b/dist/install/windows/x64/standalone.iss @@ -6,7 +6,6 @@ #define MyAppVersion "8.0.0-beta.1" #define MyAppPublisher "Ground Zero Tech-Works, Inc." #define MyAppURL "https://ayanova.com/" -#define MyAppExeName "AyaNova.exe" #define MyAppLauncherExeName "ayanova-launcher.exe" @@ -24,9 +23,7 @@ AppUpdatesURL={#MyAppURL} DefaultDirName={autopf}\ayanova DisableProgramGroupPage=yes LicenseFile=C:\data\code\raven\dist\assets\license.rtf -; Uncomment the following line to run in non administrative install mode (install for current user only.) -;PrivilegesRequired=lowest -OutputDir=C:\data\code\raven\dist\install\windows-pg-standalone\output +OutputDir=C:\data\code\raven\dist\install\windows\x64\output OutputBaseFilename=ayanova-single-setup SetupIconFile=C:\data\code\raven\graphics\logo.ico Compression=lzma @@ -35,22 +32,17 @@ WizardStyle=modern ArchitecturesInstallIn64BitMode=x64 ArchitecturesAllowed=x64 -;[Languages] -;Name: "english"; MessagesFile: "compiler:Default.isl" -;Name: "french"; MessagesFile: "compiler:Languages\French.isl" -;Name: "german"; MessagesFile: "compiler:Languages\German.isl" -;Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] -Source: "C:\data\code\raven\dist\win-x64\ayanova\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion -Source: "C:\data\code\raven\dist\win-x64\ayanova\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "C:\data\code\raven\dist\win-x64\ayanova\standalone\AyaNova.exe"; DestDir: "{app}"; Flags: ignoreversion +Source: "C:\data\code\raven\dist\win-x64\ayanova\standalone\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "C:\data\code\raven\dist\win-x64\launcher\config.json"; DestDir: "{app}"; Flags: ignoreversion confirmoverwrite Source: "C:\data\code\raven\dist\win-x64\launcher\*"; DestDir: "{app}\launcher"; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "C:\data\code\raven\dist\win-x64\postgres\*"; DestDir: "{app}\local-postgres"; Permissions: users-modify;Flags: ignoreversion recursesubdirs createallsubdirs -Source: "C:\data\code\raven\dist\win-x64\data\database\*"; DestDir: "{commonappdata}\ayanova\database"; Permissions: users-modify; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "C:\data\code\raven\dist\win-x64\postgres-standalone\*"; DestDir: "{app}\local-postgres"; Permissions: users-modify;Flags: ignoreversion recursesubdirs createallsubdirs +Source: "C:\data\code\raven\dist\win-x64\postgres-empty-database\*"; DestDir: "{commonappdata}\ayanova\database"; Permissions: users-modify; Flags: ignoreversion recursesubdirs createallsubdirs [Dirs] Name: "{app}\.local-chromium";Permissions: users-modify;Flags: uninsalwaysuninstall @@ -62,23 +54,20 @@ Name: "{commonappdata}\ayanova\logs";Permissions: users-modify; Type: filesandordirs; Name: "{app}\.local-chromium\*" [Icons] -Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\launcher\{#MyAppLauncherExeName}"; -;IconFilename: "{app}\logo.ico" -Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\launcher\{#MyAppLauncherExeName}"; Tasks: desktopicon +Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\launcher\ayanova-launcher.exe"; +Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\launcher\ayanova-launcher.exe"; Tasks: desktopicon [Run] -Filename: "{app}\launcher\{#MyAppLauncherExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent +Filename: "{app}\launcher\ayanova-launcher.exe"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent [Code] procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin if CurUninstallStep = usPostUninstall then begin - if MsgBox('Do you want to delete the AyaNova database?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then - //this is the msg that will display after uninstall,change is as you prefer + if MsgBox('Do you want to delete all AyaNova database and attachment files?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then begin - if MsgBox('Are you sure you want to **PERMANENTLY** delete the database files?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then - //this is the msg that will display after uninstall,change is as you prefer + if MsgBox('Are you sure you want to **PERMANENTLY** delete all AyaNova database and attachment files?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then begin DelTree(ExpandConstant('{commonappdata}\ayanova'), True, True, True); end;