From 3751379f1e9a4c215fb6eb898b4ccc67659b9ace Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Tue, 10 May 2022 21:51:50 +0700 Subject: initial commit 2 --- setup/win32/setup.nsi | 489 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 489 insertions(+) create mode 100644 setup/win32/setup.nsi (limited to 'setup/win32/setup.nsi') diff --git a/setup/win32/setup.nsi b/setup/win32/setup.nsi new file mode 100644 index 00000000..0c9d13da --- /dev/null +++ b/setup/win32/setup.nsi @@ -0,0 +1,489 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +# TODO: Avoid to uninstall the database +# TODO: We can update the server or the clients without to uninstall the all-in-one +# TODO: Add startmenu handling (link to localhost + uninstall) + +Unicode True + +!include 'MUI2.nsh' +!include 'FileFunc.nsh' +!include 'LogicLib.nsh' +!include 'Sections.nsh' +!include 'x64.nsh' + +!macro IfKeyExists ROOT MAIN_KEY KEY + # This macro comes from http://nsis.sourceforge.net/Check_for_a_Registry_Key + Push $R0 + Push $R1 + Push $R2 + + # XXX bug if ${ROOT}, ${MAIN_KEY} or ${KEY} use $R0 or $R1 + + StrCpy $R1 "0" # loop index + StrCpy $R2 "0" # not found + + ${Do} + EnumRegKey $R0 ${ROOT} "${MAIN_KEY}" "$R1" + ${If} $R0 == "${KEY}" + StrCpy $R2 "1" # found + ${Break} + ${EndIf} + IntOp $R1 $R1 + 1 + ${LoopWhile} $R0 != "" + + ClearErrors + + Exch 2 + Pop $R0 + Pop $R1 + Exch $R2 +!macroend + +!define PUBLISHER 'Odoo S.A.' + +!ifndef MAJOR_VERSION + !define MAJOR_VERSION '14' +!endif + +!ifndef MINOR_VERSION + !define MINOR_VERSION '0' +!endif + +!ifndef REVISION_VERSION + !define REVISION_VERSION 'alpha1' +!endif + +!ifndef VERSION + !define VERSION "${MAJOR_VERSION}.${MINOR_VERSION}" +!endif + +!ifndef PYTHONVERSION + !define PYTHONVERSION '3.7.4' +!endif + +!ifndef SERVICENAME + !define SERVICENAME 'odoo-server-${VERSION}' +!endif + +!ifndef TOOLSDIR + !define TOOLSDIR 'c:\odoobuild' +!endif + +!define PRODUCT_NAME "Odoo" +!define DISPLAY_NAME "${PRODUCT_NAME} ${MAJOR_VERSION}.${MINOR_VERSION}" + +!define UNINSTALL_BASE_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall" +!define UNINSTALL_REGISTRY_KEY "${UNINSTALL_BASE_REGISTRY_KEY}\${DISPLAY_NAME}" + +!define UNINSTALL_REGISTRY_KEY_SERVER "${UNINSTALL_BASE_REGISTRY_KEY}\Odoo Server ${VERSION}" + +!define REGISTRY_KEY "SOFTWARE\${DISPLAY_NAME}" + +!define DEFAULT_POSTGRESQL_HOSTNAME 'localhost' +!define DEFAULT_POSTGRESQL_PORT 5432 +!define DEFAULT_POSTGRESQL_USERNAME 'openpg' +!define DEFAULT_POSTGRESQL_PASSWORD 'openpgpwd' + +Name '${DISPLAY_NAME}' +Caption "${PRODUCT_NAME} ${VERSION} Setup" +OutFile "odoo_setup_${VERSION}.exe" +SetCompressor /FINAL lzma +ShowInstDetails show + +BrandingText '${PRODUCT_NAME} ${VERSION}' + +RequestExecutionLevel admin + +!insertmacro GetParameters +!insertmacro GetOptions + +Var Option_AllInOne +Var HasPostgreSQL +Var cmdLineParams + +Var TextPostgreSQLHostname +Var TextPostgreSQLPort +Var TextPostgreSQLUsername +Var TextPostgreSQLPassword + +Var HWNDPostgreSQLHostname +Var HWNDPostgreSQLPort +Var HWNDPostgreSQLUsername +Var HWNDPostgreSQLPassword + +!define STATIC_PATH "static" +!define PIXMAPS_PATH "${STATIC_PATH}\pixmaps" + +!define MUI_ABORTWARNING +!define MUI_ICON "${PIXMAPS_PATH}\odoo-icon.ico" + +!define MUI_WELCOMEFINISHPAGE_BITMAP "${PIXMAPS_PATH}\odoo-intro.bmp" +!define MUI_UNWELCOMEFINISHPAGE_BITMAP "${PIXMAPS_PATH}\odoo-intro.bmp" +!define MUI_HEADERIMAGE +!define MUI_HEADERIMAGE_BITMAP "${PIXMAPS_PATH}\odoo-slogan.bmp" +!define MUI_HEADERIMAGE_BITMAP_NOSTRETCH +!define MUI_HEADER_TRANSPARENT_TEXT "" + +!insertmacro MUI_PAGE_WELCOME +!insertmacro MUI_PAGE_LICENSE "${STATIC_PATH}\doc\LICENSE" +!define MUI_COMPONENTSPAGE_SMALLDESC +!define MUI_PAGE_CUSTOMFUNCTION_LEAVE ComponentLeave +!insertmacro MUI_PAGE_COMPONENTS +Page Custom ShowPostgreSQL LeavePostgreSQL +!insertmacro MUI_PAGE_DIRECTORY +!insertmacro MUI_PAGE_INSTFILES + +!define MUI_FINISHPAGE_NOAUTOCLOSE +!define MUI_FINISHPAGE_RUN +!define MUI_FINISHPAGE_RUN_CHECKED +!define MUI_FINISHPAGE_RUN_TEXT "$(DESC_FinishPageText)" +!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchLink" +!define MUI_FINISHPAGE_LINK $(DESC_FinishPage_Link) +!define MUI_FINISHPAGE_LINK_LOCATION "https://www.odoo.com/page/contactus" +!insertmacro MUI_PAGE_FINISH + +!insertmacro MUI_UNPAGE_WELCOME +!insertmacro MUI_UNPAGE_CONFIRM +!insertmacro MUI_UNPAGE_INSTFILES +!insertmacro MUI_UNPAGE_FINISH + +!insertmacro MUI_LANGUAGE "English" +!insertmacro MUI_LANGUAGE "French" +!insertmacro MUI_RESERVEFILE_LANGDLL + +; English +LangString DESC_Odoo_Server ${LANG_ENGLISH} "Install the Odoo Server with all the Odoo standard modules." +LangString DESC_PostgreSQL ${LANG_ENGLISH} "Install the PostgreSQL RDBMS used by Odoo." +LangString DESC_FinishPage_Link ${LANG_ENGLISH} "Contact Odoo for Partnership and/or Support" +LangString DESC_AtLeastOneComponent ${LANG_ENGLISH} "You have to choose at least one component" +LangString DESC_CanNotInstallPostgreSQL ${LANG_ENGLISH} "You can not install the PostgreSQL database without the Odoo Server" +LangString WARNING_HostNameIsEmpty ${LANG_ENGLISH} "The hostname for the connection to the PostgreSQL Server is empty" +LangString WARNING_UserNameIsEmpty ${LANG_ENGLISH} "The username for the connection to the PostgreSQL Server is empty" +LangString WARNING_PasswordIsEmpty ${LANG_ENGLISH} "The password for the connection to the PostgreSQL Server is empty" +LangString WARNING_PortIsWrong ${LANG_ENGLISH} "The port for the connexion to the PostgreSQL Server is wrong (default: 5432)" +LangString DESC_PostgreSQLPage ${LANG_ENGLISH} "Configure the information for the PostgreSQL connection" +LangString DESC_PostgreSQL_Hostname ${LANG_ENGLISH} "Hostname" +LangString DESC_PostgreSQL_Port ${LANG_ENGLISH} "Port" +LangString DESC_PostgreSQL_Username ${LANG_ENGLISH} "Username" +LangString DESC_PostgreSQL_Password ${LANG_ENGLISH} "Password" +LangString Profile_AllInOne ${LANG_ENGLISH} "All In One" +LangString Profile_Server ${LANG_ENGLISH} "Server only" +LangString TITLE_Odoo_Server ${LANG_ENGLISH} "Odoo Server" +LangString TITLE_PostgreSQL ${LANG_ENGLISH} "PostgreSQL Database" +LangString DESC_FinishPageText ${LANG_ENGLISH} "Start Odoo" + +; French +LangString DESC_Odoo_Server ${LANG_FRENCH} "Installation du Serveur Odoo avec tous les modules Odoo standards." +LangString DESC_PostgreSQL ${LANG_FRENCH} "Installation de la base de données PostgreSQL utilisée par Odoo." +LangString DESC_FinishPage_Link ${LANG_FRENCH} "Contactez Odoo pour un Partenariat et/ou du Support" +LangString DESC_AtLeastOneComponent ${LANG_FRENCH} "Vous devez choisir au moins un composant" +LangString DESC_CanNotInstallPostgreSQL ${LANG_FRENCH} "Vous ne pouvez pas installer la base de données PostgreSQL sans le serveur Odoo" +LangString WARNING_HostNameIsEmpty ${LANG_FRENCH} "L'adresse pour la connection au serveur PostgreSQL est vide" +LangString WARNING_UserNameIsEmpty ${LANG_FRENCH} "Le nom d'utilisateur pour la connection au serveur PostgreSQL est vide" +LangString WARNING_PasswordIsEmpty ${LANG_FRENCH} "Le mot de passe pour la connection au serveur PostgreSQL est vide" +LangString WARNING_PortIsWrong ${LANG_FRENCH} "Le port pour la connection au serveur PostgreSQL est erroné (défaut: 5432)" +LangString DESC_PostgreSQLPage ${LANG_FRENCH} "Configurez les informations de connection pour le serveur PostgreSQL" +LangString DESC_PostgreSQL_Hostname ${LANG_FRENCH} "Hôte" +LangString DESC_PostgreSQL_Port ${LANG_FRENCH} "Port" +LangString DESC_PostgreSQL_Username ${LANG_FRENCH} "Utilisateur" +LangString DESC_PostgreSQL_Password ${LANG_FRENCH} "Mot de passe" +LangString Profile_AllInOne ${LANG_FRENCH} "All In One" +LangString Profile_Server ${LANG_FRENCH} "Seulement le serveur" +LangString TITLE_Odoo_Server ${LANG_FRENCH} "Serveur Odoo" +LangString TITLE_PostgreSQL ${LANG_FRENCH} "Installation du serveur de base de données PostgreSQL" +LangString DESC_FinishPageText ${LANG_FRENCH} "Démarrer Odoo" + +InstType $(Profile_AllInOne) +InstType $(Profile_Server) + +Section $(TITLE_Odoo_Server) SectionOdoo_Server + SectionIn 1 2 + + # Installing winpython + SetOutPath "$INSTDIR\python" + ${If} ${RunningX64} + File /r /x "__pycache__" "${TOOLSDIR}\WinPy64\python-${PYTHONVERSION}.amd64\*" + ${Else} + File /r /x "__pycache__" "${TOOLSDIR}\WinPy32\python-${PYTHONVERSION}\*" + ${EndIf} + + SetOutPath "$INSTDIR\nssm" + File /r /x "src" "${TOOLSDIR}\nssm-2.24\*" + + SetOutPath "$INSTDIR\server" + File /r /x "wkhtmltopdf" "..\..\*" + + SetOutPath "$INSTDIR\vcredist" + File /r "${TOOLSDIR}\vcredist\*.exe" + + # Install Visual C redistribuable files + DetailPrint "Installing Visual C++ redistributable files" + ${If} ${RunningX64} + nsExec::Exec '"$INSTDIR\vcredist\vc_redist.x64.exe" /q' + ${Else} + nsExec::Exec '"$INSTDIR\vcredist\vc_redist.x86.exe" /q' + ${EndIf} + + SetOutPath "$INSTDIR\thirdparty" + File /r "${STATIC_PATH}\wkhtmltopdf\*" + + # If there is a previous install of the Odoo Server, keep the login/password from the config file + WriteIniStr "$INSTDIR\server\odoo.conf" "options" "db_host" $TextPostgreSQLHostname + WriteIniStr "$INSTDIR\server\odoo.conf" "options" "db_user" $TextPostgreSQLUsername + WriteIniStr "$INSTDIR\server\odoo.conf" "options" "db_password" $TextPostgreSQLPassword + WriteIniStr "$INSTDIR\server\odoo.conf" "options" "db_port" $TextPostgreSQLPort + # Fix the addons path + WriteIniStr "$INSTDIR\server\odoo.conf" "options" "addons_path" "$INSTDIR\server\odoo\addons" + WriteIniStr "$INSTDIR\server\odoo.conf" "options" "bin_path" "$INSTDIR\thirdparty" + + # if we're going to install postgresql force it's path, + # otherwise we consider it's always done and/or correctly tune by users + ${If} $HasPostgreSQL == 0 + WriteIniStr "$INSTDIR\server\odoo.conf" "options" "pg_path" "$INSTDIR\PostgreSQL\bin" + ${EndIf} + + DetailPrint "Installing Windows service" + nsExec::ExecTOLog '"$INSTDIR\python\python.exe" "$INSTDIR\server\odoo-bin" --stop-after-init --logfile "$INSTDIR\server\odoo.log" -s' + ${If} ${RunningX64} + nsExec::ExecToLog '"$INSTDIR\nssm\win64\nssm.exe" install ${SERVICENAME} "$INSTDIR\python\python.exe" "\"$INSTDIR\server\odoo-bin\""' + nsExec::ExecToLog '"$INSTDIR\nssm\win64\nssm.exe" set ${SERVICENAME} AppDirectory "$\"$INSTDIR\server$\""' + ${Else} + nsExec::ExecToLog '"$INSTDIR\nssm\win32\nssm.exe" install ${SERVICENAME} "$INSTDIR\python\python.exe" "\"$INSTDIR\server\odoo-bin\""' + nsExec::ExecToLog '"$INSTDIR\nssm\win32\nssm.exe" set ${SERVICENAME} AppDirectory "$\"$INSTDIR\server$\""' + ${EndIf} + + nsExec::Exec "net stop ${SERVICENAME}" + sleep 2 + + nsExec::Exec "net start ${SERVICENAME}" + sleep 2 + +SectionEnd + +Section $(TITLE_PostgreSQL) SectionPostgreSQL + SectionIn 1 2 + SetOutPath '$TEMP' + VAR /GLOBAL postgresql_exe_filename + VAR /GLOBAL postgresql_url + + ${If} ${RunningX64} + StrCpy $postgresql_exe_filename "postgresql-12.4-1-windows-x64.exe" + ${Else} + StrCpy $postgresql_exe_filename "postgresql-10.14-1-windows.exe" + ${EndIf} + + StrCpy $postgresql_url "https://get.enterprisedb.com/postgresql/$postgresql_exe_filename" + nsExec::Exec 'net user openpgsvc /delete' + + inetc::get "$postgresql_url" "$TEMP/$postgresql_exe_filename" /POPUP + pop $0 + + ReadRegStr $0 HKLM "System\CurrentControlSet\Control\ComputerName\ActiveComputerName" "ComputerName" + StrCmp $0 "" win9x + Goto done + win9x: + ReadRegStr $0 HKLM "System\CurrentControlSet\Control\ComputerName\ComputerName" "ComputerName" + done: + Rmdir /r "$INSTDIR\PostgreSQL" + ExecWait '"$TEMP\$postgresql_exe_filename" \ + --mode unattended \ + --prefix "$INSTDIR\PostgreSQL" \ + --datadir "$INSTDIR\PostgreSQL\data" \ + --servicename "PostgreSQL_For_Odoo" \ + --serviceaccount "openpgsvc" --servicepassword "0p3npgsvcPWD" \ + --superaccount "$TextPostgreSQLUsername" --superpassword "$TextPostgreSQLPassword" \ + --serverport $TextPostgreSQLPort' +SectionEnd + +Section -Post + WriteRegExpandStr HKLM "${UNINSTALL_REGISTRY_KEY}" "UninstallString" "$INSTDIR\Uninstall.exe" + WriteRegExpandStr HKLM "${UNINSTALL_REGISTRY_KEY}" "InstallLocation" "$INSTDIR" + WriteRegStr HKLM "${UNINSTALL_REGISTRY_KEY}" "DisplayName" "${DISPLAY_NAME}" + WriteRegStr HKLM "${UNINSTALL_REGISTRY_KEY}" "DisplayVersion" "${MAJOR_VERSION}.${MINOR_VERSION}" + WriteRegStr HKLM "${UNINSTALL_REGISTRY_KEY}" "Publisher" "${PUBLISHER}" + WriteRegStr HKLM "${UNINSTALL_REGISTRY_KEY}" "HelpLink" "support@odoo.com" + WriteRegStr HKLM "${UNINSTALL_REGISTRY_KEY}" "HelpTelephone" "+32.81.81.37.00" + WriteRegStr HKLM "${UNINSTALL_REGISTRY_KEY}" "URLInfoAbout" "https://www.odoo.com" + WriteRegStr HKLM "${UNINSTALL_REGISTRY_KEY}" "Contact" "sales@odoo.com" + WriteRegDWORD HKLM "${UNINSTALL_REGISTRY_KEY}" "NoModify" "1" + WriteRegDWORD HKLM "${UNINSTALL_REGISTRY_KEY}" "NoRepair" "1" + WriteUninstaller "$INSTDIR\Uninstall.exe" +SectionEnd + +!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${SectionOdoo_Server} $(DESC_Odoo_Server) + !insertmacro MUI_DESCRIPTION_TEXT ${SectionPostgreSQL} $(DESC_PostgreSQL) +!insertmacro MUI_FUNCTION_DESCRIPTION_END + +Section "Uninstall" + # Check if the server is installed + !insertmacro IfKeyExists "HKLM" "${UNINSTALL_REGISTRY_KEY_SERVER}" "UninstallString" + Pop $R0 + ReadRegStr $0 HKLM "${UNINSTALL_REGISTRY_KEY_SERVER}" "UninstallString" + ExecWait '"$0" /S' + + nsExec::Exec "net stop ${SERVICENAME}" + nsExec::Exec "sc delete ${SERVICENAME}" + sleep 2 + + Rmdir /r "$INSTDIR\server" + Rmdir /r "$INSTDIR\thirdparty" + Rmdir /r "$INSTDIR\python" + Rmdir /r "$INSTDIR\nssm" + DeleteRegKey HKLM "${UNINSTALL_REGISTRY_KEY}" +SectionEnd + +Function .onInit + VAR /GLOBAL previous_install_dir + ${If} ${RunningX64} + SetRegView 64 + ${EndIf} + ReadRegStr $previous_install_dir HKLM "${REGISTRY_KEY}" "Install_Dir" + ${If} $previous_install_dir == "" + ${If} ${RunningX64} + StrCpy $INSTDIR "$PROGRAMFILES64\Odoo ${VERSION}" + ${Else} + StrCpy $INSTDIR "$PROGRAMFILES\Odoo ${VERSION}" + ${EndIf} + WriteRegStr HKLM "${REGISTRY_KEY}" "Install_dir" "$INSTDIR" + ${EndIf} + + Push $R0 + ${GetParameters} $cmdLineParams + ClearErrors + Pop $R0 + + StrCpy $Option_AllInOne 0 + StrCpy $HasPostgreSQL 0 + + StrCpy $TextPostgreSQLHostname ${DEFAULT_POSTGRESQL_HOSTNAME} + StrCpy $TextPostgreSQLPort ${DEFAULT_POSTGRESQL_PORT} + StrCpy $TextPostgreSQLUsername ${DEFAULT_POSTGRESQL_USERNAME} + StrCpy $TextPostgreSQLPassword ${DEFAULT_POSTGRESQL_PASSWORD} + + Push $R0 + ${GetOptions} $cmdLineParams '/allinone' $R0 + IfErrors +2 0 + StrCpy $Option_AllInOne 1 + Pop $R0 + + StrCmp $Option_AllInOne 1 AllInOneMode + StrCmp $Option_AllInOne 0 NoAllInOneMode + + AllInOneMode: + MessageBox MB_OK|MB_ICONINFORMATION "All In One" + + NoAllInOneMode: + + !insertmacro MUI_LANGDLL_DISPLAY + + ClearErrors + EnumRegKey $0 HKLM "SOFTWARE\PostgreSQL\Installations" 0 + IfErrors DoInstallPostgreSQL 0 + StrCmp $0 "" DoInstallPostgreSQL + StrCpy $HasPostgreSQL 1 + !insertmacro UnselectSection ${SectionPostgreSQL} + SectionSetFlags ${SectionPostgreSQL} ${SF_RO} + + DoInstallPostgreSQL: +FunctionEnd + +Function .onSelChange + ${If} $HasPostgreSQL == 1 + !insertmacro UnselectSection ${SectionPostgreSQL} + ${EndIf} +FunctionEnd + +Function PostgreSQLOnBack +FunctionEnd + +Function ShowPostgreSQL + SectionGetFlags ${SectionOdoo_Server} $0 + IntOp $0 $0 & ${SF_SELECTED} + IntCmp $0 ${SF_SELECTED} LaunchPostgreSQLConfiguration + Abort + LaunchPostgreSQLConfiguration: + + nsDialogs::Create /NOUNLOAD 1018 + Pop $0 + + ${If} $0 == error + Abort + ${EndIf} + + GetFunctionAddress $0 PostgreSQLOnBack + nsDialogs::OnBack $0 + + ${NSD_CreateLabel} 0 0 100% 10u $(DESC_PostgreSQLPage) + Pop $0 + + ${NSD_CreateLabel} 0 45 60u 12u $(DESC_PostgreSQL_Hostname) + Pop $0 + ${NSD_CreateText} 100 45 150u 12u $TextPostgreSQLHostname + Pop $HWNDPostgreSQLHostname + + ${NSD_CreateLabel} 0 75 60u 12u $(DESC_PostgreSQL_Port) + Pop $0 + ${NSD_CreateNumber} 100 75 150u 12u $TextPostgreSQLPort + Pop $HWNDPostgreSQLPort + ${NSD_CreateLabel} 0 105 60u 12u $(DESC_PostgreSQL_Username) + Pop $0 + ${NSD_CreateText} 100 105 150u 12u $TextPostgreSQLUsername + Pop $HWNDPostgreSQLUsername + ${NSD_CreateLabel} 0 135 60u 12u $(DESC_PostgreSQL_Password) + Pop $0 + ${NSD_CreateText} 100 135 150u 12u $TextPostgreSQLPassword + Pop $HWNDPostgreSQLPassword + + nsDialogs::Show +FunctionEnd + +Function LeavePostgreSQL + ${NSD_GetText} $HWNDPostgreSQLHostname $TextPostgreSQLHostname + ${NSD_GetText} $HWNDPostgreSQLPort $TextPostgreSQLPort + ${NSD_GetText} $HWNDPostgreSQLUsername $TextPostgreSQLUsername + ${NSD_GetText} $HWNDPostgreSQLPassword $TextPostgreSQLPassword + StrLen $1 $TextPostgreSQLHostname + ${If} $1 == 0 + MessageBox MB_ICONEXCLAMATION|MB_OK $(WARNING_HostNameIsEmpty) + Abort + ${EndIf} + + ${If} $TextPostgreSQLPort <= 0 + ${OrIf} $TextPostgreSQLPort > 65535 + MessageBox MB_ICONEXCLAMATION|MB_OK $(WARNING_PortIsWrong) + Abort + ${EndIf} + + StrLen $1 $TextPostgreSQLUsername + ${If} $1 == 0 + MessageBox MB_ICONEXCLAMATION|MB_OK $(WARNING_UserNameIsEmpty) + Abort + ${EndIf} + + StrLen $1 $TextPostgreSQLPassword + ${If} $1 == 0 + MessageBox MB_ICONEXCLAMATION|MB_OK $(WARNING_PasswordIsEmpty) + Abort + ${EndIf} +FunctionEnd + +Function ComponentLeave + SectionGetFlags ${SectionOdoo_Server} $0 + IntOp $0 $0 & ${SF_SELECTED} + IntCmp $0 ${SF_SELECTED} Done + + SectionGetFlags ${SectionPostgreSQL} $0 + IntOp $0 $0 & ${SF_SELECTED} + IntCmp $0 ${SF_SELECTED} DontInstallPostgreSQL + + DontInstallPostgreSQL: + MessageBox MB_ICONEXCLAMATION|MB_OK $(DESC_CanNotInstallPostgreSQL) + Abort + Done: +FunctionEnd + +Function LaunchLink + ExecShell "open" "http://localhost:8069/" +FunctionEnd -- cgit v1.2.3