From 747430e388af1b7db03a517f002098a632b2cc22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D0=BE=D0=BD=D0=B4=D0=B0=D1=80=D0=B5=D0=B2=20=D0=98?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD?= Date: Sun, 23 Apr 2017 11:49:01 +0200 Subject: [PATCH] installer: check if PascalABCNET.exe is running (fix #378) --- ReleaseGenerators/PascalABCNETMini.nsi | 8 ++++++ ReleaseGenerators/PascalABCNETStandart.nsi | 10 +++++++- ReleaseGenerators/PascalABCNET_end.nsh | 8 +++--- ReleaseGenerators/nsProcess.nsh | 28 +++++++++++++++++++++ Utils/NSIS/Unicode/Plugins/FindProcDLL.dll | Bin 0 -> 28160 bytes Utils/NSIS/Unicode/Plugins/nsProcess.dll | Bin 0 -> 4608 bytes 6 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 ReleaseGenerators/nsProcess.nsh create mode 100644 Utils/NSIS/Unicode/Plugins/FindProcDLL.dll create mode 100644 Utils/NSIS/Unicode/Plugins/nsProcess.dll diff --git a/ReleaseGenerators/PascalABCNETMini.nsi b/ReleaseGenerators/PascalABCNETMini.nsi index 34c2a96a7..8acdbdcb2 100644 --- a/ReleaseGenerators/PascalABCNETMini.nsi +++ b/ReleaseGenerators/PascalABCNETMini.nsi @@ -3,6 +3,7 @@ OutFile "..\Release\PascalABCNETMiniSetup.exe" !include PascalABCNET_head.nsh !include PascalABCNET_sections_min.nsh !include PascalABCNET_end.nsh +!include "nsProcess.nsh" Function .onInit IfFileExists "$WINDIR\Microsoft.NET\Framework\v4.0.30319\System.dll" +3 0 @@ -11,4 +12,11 @@ Function .onInit !insertmacro MUI_LANGDLL_DISPLAY Goto exit exit: +checkprocess: + ${nsProcess::FindProcess} "PascalABCNET.exe" $R0 + StrCmp $R0 0 0 notRunning + MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION $(DESC_IsRunning) IDRETRY checkprocess IDCANCEL end + end: + Abort +notRunning: FunctionEnd \ No newline at end of file diff --git a/ReleaseGenerators/PascalABCNETStandart.nsi b/ReleaseGenerators/PascalABCNETStandart.nsi index f10b93309..235421773 100644 --- a/ReleaseGenerators/PascalABCNETStandart.nsi +++ b/ReleaseGenerators/PascalABCNETStandart.nsi @@ -3,6 +3,7 @@ OutFile "..\Release\PascalABCNETSetup.exe" !include PascalABCNET_head.nsh !include PascalABCNET_sections.nsh !include PascalABCNET_end.nsh +!include "nsProcess.nsh" Function .onInit IfFileExists "$WINDIR\Microsoft.NET\Framework\v4.0.30319\System.dll" +3 0 @@ -10,5 +11,12 @@ Function .onInit Abort !insertmacro MUI_LANGDLL_DISPLAY Goto exit - exit: +exit: +checkprocess: + ${nsProcess::FindProcess} "PascalABCNET.exe" $R0 + StrCmp $R0 0 0 notRunning + MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION $(DESC_IsRunning) IDRETRY checkprocess IDCANCEL end + end: + Abort +notRunning: FunctionEnd \ No newline at end of file diff --git a/ReleaseGenerators/PascalABCNET_end.nsh b/ReleaseGenerators/PascalABCNET_end.nsh index 9d58fdf19..ae6c116c9 100644 --- a/ReleaseGenerators/PascalABCNET_end.nsh +++ b/ReleaseGenerators/PascalABCNET_end.nsh @@ -51,7 +51,7 @@ SectionEnd ;Function .onInit -; !insertmacro MUI_LANGDLL_DISPLAY + ;FunctionEnd @@ -100,8 +100,8 @@ SectionEnd LangString DESC_ConsoleCompiler_Desc ${LANG_ENGLISH} " " LangString DESC_INTERNAL_ERROR_REPORT_Desc ${LANG_RUSSIAN} "Позволяет отправить разработчикам отчет о ошибках в работе компилятора" LangString DESC_INTERNAL_ERROR_REPORT_Desc ${LANG_ENGLISH} " " - LangString DESC_PT4_Desc ${LANG_RUSSIAN} "Электронный задачник Programming Taskbook Copyright (c)М.Э.Абрамян, 1998-2014" - LangString DESC_PT4_Desc ${LANG_ENGLISH} "Programming Taskbook Copyright (c) M.E. Abramyan, 1998-2014" + LangString DESC_PT4_Desc ${LANG_RUSSIAN} "Электронный задачник Programming Taskbook Copyright (c)М.Э.Абрамян, 1998-2017" + LangString DESC_PT4_Desc ${LANG_ENGLISH} "Programming Taskbook Copyright (c) M.E. Abramyan, 1998-2017" LangString DESC_Samples_Desc ${LANG_RUSSIAN} "Файлы примеров" LangString DESC_Samples_Desc ${LANG_ENGLISH} "Samples" LangString DESC_RusLoc_Desc ${LANG_RUSSIAN} "Поддержка русcкого языка" @@ -136,6 +136,8 @@ SectionEnd LangString DESC_Remove ${LANG_ENGLISH} "Remove" LangString DESC_PT4Setup ${LANG_RUSSIAN} "Настройка задачника PT4" LangString DESC_PT4Setup ${LANG_ENGLISH} "PT4 Setup" + LangString DESC_IsRunning ${LANG_RUSSIAN} "Невозможно начать установку, так как запущена среда PascalABC.NET. Закройте PascalABC.NET и нажмите Повторить" + LangString DESC_IsRunning ${LANG_ENGLISH} "PascalABC.NET is running. Please close it first" LicenseLangString MUILicense ${LANG_RUSSIAN} "License.rtf" LicenseLangString MUILicense ${LANG_ENGLISH} "License_en.rtf" diff --git a/ReleaseGenerators/nsProcess.nsh b/ReleaseGenerators/nsProcess.nsh new file mode 100644 index 000000000..9ef6098d2 --- /dev/null +++ b/ReleaseGenerators/nsProcess.nsh @@ -0,0 +1,28 @@ +!define nsProcess::FindProcess `!insertmacro nsProcess::FindProcess` + +!macro nsProcess::FindProcess _FILE _ERR + nsProcess::_FindProcess /NOUNLOAD `${_FILE}` + Pop ${_ERR} +!macroend + + +!define nsProcess::KillProcess `!insertmacro nsProcess::KillProcess` + +!macro nsProcess::KillProcess _FILE _ERR + nsProcess::_KillProcess /NOUNLOAD `${_FILE}` + Pop ${_ERR} +!macroend + +!define nsProcess::CloseProcess `!insertmacro nsProcess::CloseProcess` + +!macro nsProcess::CloseProcess _FILE _ERR + nsProcess::_CloseProcess /NOUNLOAD `${_FILE}` + Pop ${_ERR} +!macroend + + +!define nsProcess::Unload `!insertmacro nsProcess::Unload` + +!macro nsProcess::Unload + nsProcess::_Unload +!macroend diff --git a/Utils/NSIS/Unicode/Plugins/FindProcDLL.dll b/Utils/NSIS/Unicode/Plugins/FindProcDLL.dll new file mode 100644 index 0000000000000000000000000000000000000000..22c8398f1e346ba704eec5cf269931e9e7fe3401 GIT binary patch literal 28160 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