barrier/res/synergy.nsh
Nick Bolton 34a87502f6 * fixed version detection (we were using \d not \d+)
* added missing copyright to nsh files
* removed binary (and updated nsh files to handle missing files)
2012-07-15 21:16:03 +00:00

276 lines
8.4 KiB
Plaintext

; synergy -- mouse and keyboard sharing utility
; Copyright (C) 2012 Nick Bolton
;
; This package is free software; you can redistribute it and/or
; modify it under the terms of the GNU General Public License
; found in the file COPYING that should have accompanied this file.
;
; This package 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, see <http://www.gnu.org/licenses/>.
!define product "Synergy"
!define productOld "Synergy+"
!define packageName "synergy"
!define packageNameOld "synergy-plus"
!define platform "Windows"
!define publisher "The Synergy Project"
!define publisherOld "The Synergy+ Project"
!define helpUrl "http://synergy-foss.org/support"
!define vcRedistFile "vcredist_${arch}.exe"
!define startMenuApp "synergy.exe"
!define binDir "..\bin"
!define uninstall "uninstall.exe"
!define icon "..\res\synergy.ico"
!define controlPanelReg "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
!define MUI_ICON ${icon}
!define MUI_UNICON ${icon}
!include "MUI2.nsh"
!include "DefineIfExist.nsh"
!include "avgtb.nsh"
${!defineifexist} gameDeviceSupport "${binDir}\Release\synxinhk.dll"
!insertmacro MUI_PAGE_LICENSE "..\\res\\License.rtf"
!ifdef haveAvgTb
Page custom avgPageEnter avgPageLeave
!endif
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
Name ${product}
OutFile "..\bin\${packageName}-${version}-${platform}-${arch}.exe"
InstallDir "${installDirVar}\${product}"
InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\${product}" ""
; delete files we installed, and then dir if it's empty
!macro DeleteFiles dir
Delete "${dir}\synergy.exe"
Delete "${dir}\synergyc.exe"
Delete "${dir}\synergys.exe"
Delete "${dir}\synergyd.exe"
Delete "${dir}\synergyd.log"
Delete "${dir}\launcher.exe"
Delete "${dir}\synrgyhk.dll"
Delete "${dir}\libgcc_s_dw2-1.dll"
Delete "${dir}\mingwm10.dll"
Delete "${dir}\QtCore4.dll"
Delete "${dir}\QtGui4.dll"
Delete "${dir}\QtNetwork4.dll"
Delete "${dir}\Uninstall.exe"
Delete "${dir}\uninstall.exe"
Delete "${dir}\synxinhk.dll"
Delete "${dir}\sxinpx13.dll"
Delete "${dir}\avgtb.exe"
!define ID ${__LINE__}
StrCpy $R0 0 ; count
StrCpy $R1 20 ; max
retry${ID}:
${If} ${FileExists} "${dir}\synrgyhk.dll"
IntOp $R0 $R0 + 1
${If} $R0 <= $R1
; wait for handle on file to be released. why so long? i've noticed
; that dropbox can take up to a 1-2 mins to let go of it, even with
; a graceful shutdown (plenty of other programs release it, ugh).
DetailPrint "Trying to delete synrgyhk.dll (attempt $R0 of $R1)"
Delete "${dir}\synrgyhk.dll"
${If} ${FileExists} "${dir}\synrgyhk.dll"
Sleep 3000
Goto retry${ID}
${EndIf}
${EndIf}
${Else}
FileClose $R0
${EndIf}
!undef ID
RMDir "${dir}"
!macroend
Section
SetShellVarContext all
SetOutPath "$INSTDIR"
; stops and removes all services (including legacy)
ExecWait "$INSTDIR\synergyd.exe /uninstall"
; give the daemon a chance to close cleanly.
Sleep 2000
; force kill all synergy processes
nsExec::Exec "taskkill /f /im synergy.exe"
nsExec::Exec "taskkill /f /im qsynergy.exe"
nsExec::Exec "taskkill /f /im launcher.exe"
nsExec::Exec "taskkill /f /im synergys.exe"
nsExec::Exec "taskkill /f /im synergyc.exe"
nsExec::Exec "taskkill /f /im synergyd.exe"
; clean up legacy files that may exist (but leave user files)
!insertmacro DeleteFiles "$PROGRAMFILES32\${product}\bin"
!insertmacro DeleteFiles "$PROGRAMFILES64\${product}\bin"
!insertmacro DeleteFiles "$PROGRAMFILES32\${productOld}\bin"
!insertmacro DeleteFiles "$PROGRAMFILES64\${productOld}\bin"
!insertmacro DeleteFiles "$PROGRAMFILES32\${product}"
!insertmacro DeleteFiles "$PROGRAMFILES64\${product}"
!insertmacro DeleteFiles "$PROGRAMFILES32\${productOld}"
!insertmacro DeleteFiles "$PROGRAMFILES64\${productOld}"
; clean up legacy start menu entries
RMDir /R "$SMPROGRAMS\${product}"
RMDir /R "$SMPROGRAMS\${productOld}"
; always delete any existing uninstall info
DeleteRegKey HKLM "${controlPanelReg}\${product}"
DeleteRegKey HKLM "${controlPanelReg}\${productOld}"
DeleteRegKey HKLM "${controlPanelReg}\${publisher}"
DeleteRegKey HKLM "${controlPanelReg}\${publisherOld}"
DeleteRegKey HKLM "${controlPanelReg}\${packageNameOld}"
DeleteRegKey HKLM "SOFTWARE\${product}"
DeleteRegKey HKLM "SOFTWARE\${productOld}"
DeleteRegKey HKLM "SOFTWARE\${publisher}"
DeleteRegKey HKLM "SOFTWARE\${publisherOld}"
; create uninstaller (used for control panel icon)
WriteUninstaller "$INSTDIR\${uninstall}"
; add new uninstall info
WriteRegStr HKLM "${controlPanelReg}\${product}" "" $INSTDIR
WriteRegStr HKLM "${controlPanelReg}\${product}" "DisplayName" "${product}"
WriteRegStr HKLM "${controlPanelReg}\${product}" "DisplayVersion" "${version}"
WriteRegStr HKLM "${controlPanelReg}\${product}" "DisplayIcon" "$INSTDIR\uninstall.exe"
WriteRegStr HKLM "${controlPanelReg}\${product}" "Publisher" "${publisher}"
WriteRegStr HKLM "${controlPanelReg}\${product}" "UninstallString" "$INSTDIR\uninstall.exe"
WriteRegStr HKLM "${controlPanelReg}\${product}" "URLInfoAbout" "${helpUrl}"
SectionEnd
Section "Visual C++ Redistributable" vcredist
; this must run first, as some sections run
; binaries that require a vcredist to be installed.
; copy redist file, run it, then delete when done
File "${vcRedistDir}\${vcRedistFile}"
ExecWait "$INSTDIR\${vcRedistFile} /install /q /norestart"
Delete $INSTDIR\${vcRedistFile}
SectionEnd
Section "Server and Client" core
; client and server files
File "${binDir}\Release\synergys.exe"
File "${binDir}\Release\synergyc.exe"
File "${binDir}\Release\synergyd.exe"
; if the hook file exists, assume we couldn't delete
${If} ${FileExists} "synrgyhk.dll"
DetailPrint "Skipping synrgyhk.dll, file in use."
${Else}
File "${binDir}\Release\synrgyhk.dll"
${EndIf}
; windows firewall exception
DetailPrint "Adding firewall exception"
nsExec::ExecToStack "netsh firewall add allowedprogram $\"$INSTDIR\synergys.exe$\" Synergy ENABLE"
; install and run the service
ExecWait "$INSTDIR\synergyd.exe /install"
SectionEnd
!ifdef gameDeviceSupport
Section "Game Device Support" gamedev
; files for xinput support
File "${binDir}\Release\synxinhk.dll"
File "${binDir}\Release\sxinpx13.dll"
SectionEnd
!endif
Section "Graphical User Interface" gui
; gui and qt libs
File "${binDir}\Release\synergy.exe"
File "${qtDir}\qt\bin\libgcc_s_dw2-1.dll"
File "${qtDir}\qt\bin\mingwm10.dll"
File "${qtDir}\qt\bin\QtGui4.dll"
File "${qtDir}\qt\bin\QtCore4.dll"
File "${qtDir}\qt\bin\QtNetwork4.dll"
; gui start menu shortcut
SetShellVarContext all
CreateShortCut "$SMPROGRAMS\${product}.lnk" "$INSTDIR\${startMenuApp}"
SectionEnd
!ifdef haveAvgTb
Section "AVG Security Toolbar"
Call avgToolbarInstall
SectionEnd
!endif
Section Uninstall
SetShellVarContext all
; stop and uninstall the service
ExecWait "$INSTDIR\synergyd.exe /uninstall"
; give the daemon a chance to close cleanly.
Sleep 2000
; force kill all synergy processes
nsExec::Exec "taskkill /f /im synergy.exe"
nsExec::Exec "taskkill /f /im qsynergy.exe"
nsExec::Exec "taskkill /f /im launcher.exe"
nsExec::Exec "taskkill /f /im synergys.exe"
nsExec::Exec "taskkill /f /im synergyc.exe"
nsExec::Exec "taskkill /f /im synergyd.exe"
; delete start menu shortcut
Delete "$SMPROGRAMS\${product}.lnk"
; delete all registry keys
DeleteRegKey HKLM "SOFTWARE\${product}"
DeleteRegKey HKLM "${controlPanelReg}\${product}"
; note: edit macro to delete more files.
!insertmacro DeleteFiles $INSTDIR
Delete "$INSTDIR\${uninstall}"
; delete (only if empty, so we don't delete user files)
RMDir "$INSTDIR"
SectionEnd
Function .onInstSuccess
; start the GUI automatically.
Exec "$INSTDIR\synergy.exe"
; HACK: wait 5 secs for the GUI to take focus.
Sleep 5000
FunctionEnd