WinInstaller2: Check if LyX is already running during installation

Patch by Eugene
This commit is contained in:
Juergen Spitzmueller 2020-06-09 10:15:18 +02:00
parent b3a90037b1
commit b32c9ae8af
2 changed files with 35 additions and 15 deletions

View File

@ -13,9 +13,6 @@ To build the installer do the following:
extract NSISList-Unicode\NSISList.dll from the second archive to the folder \Plugins\x86-unicode of NSIS's installation folder extract NSISList-Unicode\NSISList.dll from the second archive to the folder \Plugins\x86-unicode of NSIS's installation folder
- download the plugin ShellLink (https://nsis.sourceforge.io/ShellLink_plug-in) - download the plugin ShellLink (https://nsis.sourceforge.io/ShellLink_plug-in)
extract Unicode\Plugins\ShellLink.dll from the archive to the folder \Plugins\x86-unicode of NSIS's installation folder extract Unicode\Plugins\ShellLink.dll from the archive to the folder \Plugins\x86-unicode of NSIS's installation folder
- download the plugin nsProcess (https://nsis.sourceforge.io/NsProcess_plugin) with unicode support
extract Plugin\nsProcessW.dll from the archive to the folder \Plugins\x86-unicode of NSIS's installation folder and rename it to nsProcess.dll
extract Include\nsProcess.nsh from the archive to the folder \Include of NSIS's installation folder
- Go to the Qt-kit directory, which you have specified as CMAKE_PREFIX_PATH before compiling in CMake Gui, enter the bin folder, - Go to the Qt-kit directory, which you have specified as CMAKE_PREFIX_PATH before compiling in CMake Gui, enter the bin folder,
copy these files: copy these files:
Qt5Concurrent.dll" Qt5Concurrent.dll"

View File

@ -126,7 +126,7 @@
#!include LogicLib.nsh # included in MUI2 # Allows using logic commands (such as ${If}..${Else}..${EndIf}) #!include LogicLib.nsh # included in MUI2 # Allows using logic commands (such as ${If}..${Else}..${EndIf})
#!include LangFile.nsh # included in MUI2 # Header file to create language files that can be included with a single command. #!include LangFile.nsh # included in MUI2 # Header file to create language files that can be included with a single command.
!include x64.nsh # Header file to check if target system is 64 bit or not with ${RunningX64} !include x64.nsh # Header file to check if target system is 64 bit or not with ${RunningX64}, also defines ${DisableX64FSRedirection} and ${EnableX64FSRedirection}
!include NSISList.nsh # Header file to create and work with lists in NSIS (plugin) !include NSISList.nsh # Header file to create and work with lists in NSIS (plugin)
!include nsProcess.nsh # Header file to search for a running process (plugin) !include nsProcess.nsh # Header file to search for a running process (plugin)
@ -297,13 +297,6 @@ Function .onInit # Callback function, called at the very beginning, when user do
MessageBox MB_OK|MB_ICONSTOP "LyX ${APP_VERSION} requires Windows 7 or newer." /SD IDOK MessageBox MB_OK|MB_ICONSTOP "LyX ${APP_VERSION} requires Windows 7 or newer." /SD IDOK
Quit Quit
${endif} ${endif}
# Check that LyX is not currently running
${nsProcess::FindProcess} "LyX.exe" $R0
${if} $R0 == "0"
MessageBox MB_OK|MB_ICONSTOP "$(UnInstallRunning)" /SD IDOK
Quit
${endif}
Call PrepareShellCTX # MULTIUSER_INIT should search in the right registry view Call PrepareShellCTX # MULTIUSER_INIT should search in the right registry view
!insertmacro MULTIUSER_INIT # Verify multiuser privileges !insertmacro MULTIUSER_INIT # Verify multiuser privileges
@ -341,6 +334,23 @@ Function .onInit # Callback function, called at the very beginning, when user do
${Loop} ${Loop}
FunctionEnd FunctionEnd
Function CheckIfRunning # Check that LyX in $INSTDIR is not currently running, called from Function VerifyInstDir and Section -CheckSilent (if silentinstall)
${If} ${RunningX64}
${DisableX64FSRedirection} # We need the following process to be 64 bit on 64 bit system
${EndIf}
nsExec::ExecToStack "powershell (Get-Process LyX).Path"
Pop $0 # Exit code
Pop $0 # Result string
${If} ${RunningX64}
${EnableX64FSRedirection} # Need to be anabled asap or installer might crash
${EndIf}
${StrStr} $0 $0 "$INSTDIR\bin\LyX.exe"
${If} $0 != ""
MessageBox MB_OK|MB_ICONSTOP "$(UnInstallRunning)" /SD IDOK
Abort # Abort leaving the page (when called from the page callback) / Abort install (when called from the section)
${EndIf}
FunctionEnd
Function VerifyInstDir # Custom Function, called when leaving directory page Function VerifyInstDir # Custom Function, called when leaving directory page
# if the $INSTDIR does not contain "LyX" we must add a subfolder to avoid that LyX will e.g. # if the $INSTDIR does not contain "LyX" we must add a subfolder to avoid that LyX will e.g.
# be installed directly to "C:\Program Files" - the uninstaller will then delete the whole # be installed directly to "C:\Program Files" - the uninstaller will then delete the whole
@ -351,6 +361,8 @@ Function VerifyInstDir # Custom Function, called when leaving directory page
${NSD_SetText} $mui.DirectoryPage.Directory $INSTDIR # Refresh Textbox ${NSD_SetText} $mui.DirectoryPage.Directory $INSTDIR # Refresh Textbox
Abort # Abort leaving the page Abort # Abort leaving the page
${EndIf} ${EndIf}
Call CheckIfRunning
FunctionEnd FunctionEnd
Function RetrieveSMState # Custom function, called after the Startmenu page has been created Function RetrieveSMState # Custom function, called after the Startmenu page has been created
@ -490,6 +502,8 @@ Section -CheckSilent # This section checks if it's a silent install and calls ne
# .onInit is called # .onInit is called
Call CheckIfRunning
Call RetrieveSMState Call RetrieveSMState
Call FindLatex # Search for latex Call FindLatex # Search for latex
@ -990,11 +1004,20 @@ FunctionEnd
Function un.onInit # Callback function, called when the uninstaller initializes Function un.onInit # Callback function, called when the uninstaller initializes
# Check that LyX is not currently running # Check that LyX is not currently running
${nsProcess::FindProcess} "LyX.exe" $R0 ${If} ${RunningX64}
${If} $R0 == "0" ${DisableX64FSRedirection} # We need the following process to be 64 bit on 64 bit system
${EndIf}
nsExec::ExecToStack "powershell (Get-Process LyX).Path"
Pop $0 # Exit code
Pop $0 # Result string
${If} ${RunningX64}
${EnableX64FSRedirection} # Need to be anabled asap or installer might crash
${EndIf}
${UnStrStr} $0 $0 "$INSTDIR\bin\LyX.exe"
${If} $0 != ""
MessageBox MB_OK|MB_ICONSTOP "$(UnInstallRunning)" /SD IDOK MessageBox MB_OK|MB_ICONSTOP "$(UnInstallRunning)" /SD IDOK
Quit Quit # Quit uninstaller
${endif} ${EndIf}
Call un.PrepareShellCTX Call un.PrepareShellCTX
!insertmacro MULTIUSER_UNINIT !insertmacro MULTIUSER_UNINIT