246 lines
		
	
	
		
			No EOL
		
	
	
		
			8 KiB
		
	
	
	
		
			Text
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			246 lines
		
	
	
		
			No EOL
		
	
	
		
			8 KiB
		
	
	
	
		
			Text
		
	
	
		
			Executable file
		
	
	
	
	
; This file is part of RSS Guard.
 | 
						|
;
 | 
						|
; Copyright (C) 2011-2014 by Martin Rotter <rotter.martinos@gmail.com>
 | 
						|
;
 | 
						|
; RSS Guard is free software: you can redistribute it and/or modify
 | 
						|
; it under the terms of the GNU General Public License as published by
 | 
						|
; the Free Software Foundation, either version 3 of the License, or
 | 
						|
; (at your option) any later version.
 | 
						|
;
 | 
						|
; RSS Guard 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 RSS Guard. If not, see <http:;www.gnu.org/licenses/>.
 | 
						|
 | 
						|
 | 
						|
;--------------------------------
 | 
						|
; Do necessary inclusions.
 | 
						|
!include ..\..\..\resources\nsis\NSIS.definitions.nsh
 | 
						|
!include MUI2.nsh
 | 
						|
 | 
						|
;--------------------------------
 | 
						|
; Basic values definitions.
 | 
						|
!define INST_DIR "@CPACK_TEMPORARY_DIRECTORY@"
 | 
						|
 | 
						|
; Name and file.
 | 
						|
Name "${APP_NAME}"
 | 
						|
OutFile "@CPACK_TOPLEVEL_DIRECTORY@/@CPACK_OUTPUT_FILE_NAME@"
 | 
						|
 | 
						|
; Set custom branding text.
 | 
						|
BrandingText "${APP_NAME}"
 | 
						|
 | 
						|
; Set compression.
 | 
						|
SetCompressor /SOLID /FINAL lzma
 | 
						|
 | 
						|
; Default installation folder.
 | 
						|
InstallDir "@CPACK_NSIS_INSTALL_ROOT@\${APP_NAME}"
 | 
						|
InstallDirRegKey HKCU "Software\${APP_NAME}" "Install Directory"
 | 
						|
 | 
						|
; Require administrator access.
 | 
						|
RequestExecutionLevel admin
 | 
						|
 | 
						|
;--------------------------------
 | 
						|
; Interface Settings
 | 
						|
 | 
						|
; Show "are you sure" dialog when cancelling installation.
 | 
						|
!define MUI_ABORTWARNING
 | 
						|
 | 
						|
;--------------------------------
 | 
						|
; Pages
 | 
						|
 | 
						|
; Pages for installator.
 | 
						|
!insertmacro MUI_PAGE_WELCOME
 | 
						|
!insertmacro MUI_PAGE_LICENSE "${LICENSE_FILE}"
 | 
						|
!insertmacro MUI_PAGE_DIRECTORY
 | 
						|
!insertmacro MUI_PAGE_COMPONENTS
 | 
						|
 | 
						|
; Start menu folder page configuration.
 | 
						|
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" 
 | 
						|
!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\${APP_NAME}" 
 | 
						|
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
 | 
						|
 | 
						|
!insertmacro MUI_PAGE_INSTFILES
 | 
						|
 | 
						|
; Offer user to launch the application right when it is installed.
 | 
						|
!define MUI_FINISHPAGE_RUN "$INSTDIR\${EXE_NAME}"
 | 
						|
 | 
						|
!insertmacro MUI_PAGE_FINISH
 | 
						|
 | 
						|
; Pages for uninstallator.
 | 
						|
!insertmacro MUI_UNPAGE_CONFIRM
 | 
						|
!insertmacro MUI_UNPAGE_INSTFILES
 | 
						|
!insertmacro MUI_UNPAGE_FINISH
 | 
						|
 | 
						|
;--------------------------------
 | 
						|
; Languages.
 | 
						|
 | 
						|
!insertmacro MUI_LANGUAGE "English"
 | 
						|
 | 
						|
;--------------------------------
 | 
						|
; Helper macros.
 | 
						|
 | 
						|
!macro ExecWaitJob _exec
 | 
						|
StrCpy $9 0
 | 
						|
System::Call 'kernel32::CreateIoCompletionPort(i -1,i0,i0,i0)i.r1'
 | 
						|
${IfThen} $1 != 0 ${|} IntOp $9 $9 + 1 ${|}
 | 
						|
System::Call 'kernel32::CreateJobObject(i0,i0)i.r2'
 | 
						|
${IfThen} $2 != 0 ${|} IntOp $9 $9 + 1 ${|}
 | 
						|
System::Call '*(i 0,i $1)i.r0'
 | 
						|
System::Call 'kernel32::SetInformationJobObject(i $2,i 7,i $0,i 8)i.r3'
 | 
						|
${IfThen} $3 != 0 ${|} IntOp $9 $9 + 1 ${|}
 | 
						|
System::Free $0
 | 
						|
System::Call '*(i,i,i,i)i.r0'
 | 
						|
System::Alloc 72
 | 
						|
pop $4
 | 
						|
System::Call "*$4(i 72)"
 | 
						|
System::Call 'kernel32::CreateProcess(i0,t ${_exec},i0,i0,i0,i 0x01000004,i0,i0,i $4,i $0)i.r3'
 | 
						|
${IfThen} $3 != 0 ${|} IntOp $9 $9 + 1 ${|}
 | 
						|
System::Free $4
 | 
						|
System::Call "*$0(i.r3,i.r4,i,i)"
 | 
						|
System::Free $0
 | 
						|
System::Call 'kernel32::AssignProcessToJobObject(i $2,i $3)i.r0'
 | 
						|
${IfThen} $0 != 0 ${|} IntOp $9 $9 + 1 ${|}
 | 
						|
System::Call 'kernel32::ResumeThread(i $4)i.r0'
 | 
						|
${IfThen} $0 != -1 ${|} IntOp $9 $9 + 1 ${|}
 | 
						|
System::Call 'kernel32::CloseHandle(i $3)'
 | 
						|
System::Call 'kernel32::CloseHandle(i $4)'
 | 
						|
!define __ExecWaitJob__ ExecWaitJob${__LINE__}
 | 
						|
${__ExecWaitJob__}ioportwait:
 | 
						|
System::Call 'kernel32::GetQueuedCompletionStatus(i $1,*i.r3,*i,*i.r4,i -1)i.r0'
 | 
						|
${IfThen} $0 = 0 ${|} StrCpy $9 0 ${|}
 | 
						|
${IfThen} $3 != 4 ${|} goto ${__ExecWaitJob__}ioportwait ${|}
 | 
						|
System::Call 'kernel32::CloseHandle(i $2)'
 | 
						|
System::Call 'kernel32::CloseHandle(i $1)'
 | 
						|
!undef __ExecWaitJob__
 | 
						|
${IfThen} $9 < 6 ${|} MessageBox mb_iconstop `ExecWaitJob "${_exec}" failed!` ${|}
 | 
						|
!macroend
 | 
						|
  
 | 
						|
; If you are using solid compression, files that are required before
 | 
						|
; the actual installation should be stored first in the data block,
 | 
						|
; because this will make your installer start faster.
 | 
						|
!insertmacro MUI_RESERVEFILE_LANGDLL
 | 
						|
 | 
						|
;--------------------------------
 | 
						|
; Sections.
 | 
						|
 | 
						|
; Installer sections.
 | 
						|
Section "!Core" Core
 | 
						|
  ReadRegStr $R0 SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}" "UninstallString"
 | 
						|
  IfFileExists $R0 +1 NotInstalled
 | 
						|
  MessageBox MB_OK|MB_ICONEXCLAMATION "${APP_NAME} is already installed. $\n$\nClick 'OK' to uninstall it then continue with current installation." IDOK Uninstall
 | 
						|
  
 | 
						|
Uninstall:  
 | 
						|
  !insertmacro ExecWaitJob '"$R0 /S"'
 | 
						|
 | 
						|
NotInstalled:
 | 
						|
  SetOutPath "$INSTDIR"
 | 
						|
  
 | 
						|
  ; Install core application files.
 | 
						|
  @CPACK_NSIS_FULL_INSTALL@
 | 
						|
  
 | 
						|
  ; Store installation folder.
 | 
						|
  WriteRegStr HKCU "Software\${APP_NAME}" "Install Directory" $INSTDIR
 | 
						|
  
 | 
						|
  ; Create uninstaller.
 | 
						|
  WriteUninstaller "$INSTDIR\Uninstall.exe"
 | 
						|
  
 | 
						|
  ; Create entry in Windows "Add/Remove programs" panel.
 | 
						|
  Push "DisplayName"
 | 
						|
  Push "${APP_NAME}"
 | 
						|
  Call ConditionalAddToRegisty
 | 
						|
  Push "DisplayVersion"
 | 
						|
  Push "${APP_VERSION}"
 | 
						|
  Call ConditionalAddToRegisty
 | 
						|
  Push "Publisher"
 | 
						|
  Push "@CPACK_PACKAGE_VENDOR@"
 | 
						|
  Call ConditionalAddToRegisty
 | 
						|
  Push "UninstallString"
 | 
						|
  Push "$INSTDIR\Uninstall.exe"
 | 
						|
  Call ConditionalAddToRegisty
 | 
						|
  Push "NoRepair"
 | 
						|
  Push "1"
 | 
						|
  Call ConditionalAddToRegisty
 | 
						|
  Push "NoModify"
 | 
						|
  Push "1"
 | 
						|
  Call ConditionalAddToRegisty
 | 
						|
  Push "DisplayIcon"
 | 
						|
  Push "$INSTDIR\@CPACK_NSIS_INSTALLED_ICON_NAME@"
 | 
						|
  Call ConditionalAddToRegisty
 | 
						|
  Push "HelpLink"
 | 
						|
  Push "@CPACK_NSIS_HELP_LINK@"
 | 
						|
  Call ConditionalAddToRegisty
 | 
						|
  Push "URLInfoAbout"
 | 
						|
  Push "@CPACK_NSIS_URL_INFO_ABOUT@"
 | 
						|
  Call ConditionalAddToRegisty
 | 
						|
  Push "Contact"
 | 
						|
  Push "@CPACK_NSIS_CONTACT@"
 | 
						|
  Call ConditionalAddToRegisty
 | 
						|
SectionEnd
 | 
						|
 | 
						|
Section "Desktop Icon" DesktopIcon
 | 
						|
  CreateShortCut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\${EXE_NAME}"
 | 
						|
SectionEnd
 | 
						|
 | 
						|
Section "Start Menu Shortcuts" StartMenuShortcuts
 | 
						|
  CreateDirectory "$SMPROGRAMS\${APP_NAME}"
 | 
						|
  CreateShortCut "$SMPROGRAMS\${APP_NAME}\${APP_NAME}.lnk" "$INSTDIR\${EXE_NAME}"
 | 
						|
  CreateShortCut "$SMPROGRAMS\${APP_NAME}\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
 | 
						|
SectionEnd
 | 
						|
 | 
						|
LangString DESC_Core ${LANG_ENGLISH} "Core installation files for ${APP_NAME}."
 | 
						|
LangString DESC_DesktopIcon ${LANG_ENGLISH} "Desktop icon for ${APP_NAME}."
 | 
						|
LangString DESC_QuickLaunchIcon ${LANG_ENGLISH} "Quick launch icon for ${APP_NAME}."
 | 
						|
LangString DESC_StartMenuShortcuts ${LANG_ENGLISH} "Start Menu Shortcuts for ${APP_NAME}."
 | 
						|
 | 
						|
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
 | 
						|
  !insertmacro MUI_DESCRIPTION_TEXT ${Core} $(DESC_Core)
 | 
						|
  !insertmacro MUI_DESCRIPTION_TEXT ${DesktopIcon} $(DESC_DesktopIcon)
 | 
						|
  !insertmacro MUI_DESCRIPTION_TEXT ${QuickLaunchIcon} $(DESC_QuickLaunchIcon)
 | 
						|
  !insertmacro MUI_DESCRIPTION_TEXT ${StartMenuShortcuts} $(DESC_StartMenuShortcuts)
 | 
						|
!insertmacro MUI_FUNCTION_DESCRIPTION_END
 | 
						|
 | 
						|
; Uninstaller section.
 | 
						|
Section "Uninstall"
 | 
						|
  ; Remove core application files & directories.
 | 
						|
  @CPACK_NSIS_DELETE_FILES@
 | 
						|
  @CPACK_NSIS_DELETE_DIRECTORIES@
 | 
						|
 | 
						|
  ; Remove uninstaller.
 | 
						|
  Delete "$INSTDIR\Uninstall.exe"
 | 
						|
  
 | 
						|
  ; Remove entry from Windows "Add/Remove programs" panel.
 | 
						|
  DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}"
 | 
						|
  
 | 
						|
  ; Remove rest of installed files.
 | 
						|
  ; Custom files are left intact.
 | 
						|
  RMDir "$INSTDIR"
 | 
						|
    
 | 
						|
  Delete "$SMPROGRAMS\${APP_NAME}\${APP_NAME}.lnk"
 | 
						|
  Delete "$SMPROGRAMS\${APP_NAME}\Uninstall.lnk"
 | 
						|
  RMDir "$SMPROGRAMS\${APP_NAME}"
 | 
						|
  
 | 
						|
  Delete "$DESKTOP\${APP_NAME}.lnk"
 | 
						|
 | 
						|
  DeleteRegKey /ifempty HKCU "Software\${APP_NAME}"
 | 
						|
SectionEnd
 | 
						|
 | 
						|
;--------------------------------
 | 
						|
; Custom functions.
 | 
						|
 | 
						|
; Executed when installer starts.
 | 
						|
Function .onInit
 | 
						|
  IntOp $0 ${SF_SELECTED} | ${SF_RO}
 | 
						|
  SectionSetFlags ${Core} $0
 | 
						|
FunctionEnd
 | 
						|
 | 
						|
; Conditional saving to registry.
 | 
						|
Function ConditionalAddToRegisty
 | 
						|
  Pop $0
 | 
						|
  Pop $1
 | 
						|
  StrCmp "$0" "" ConditionalAddToRegisty_EmptyString
 | 
						|
    WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}" "$1" "$0"
 | 
						|
  ConditionalAddToRegisty_EmptyString:
 | 
						|
FunctionEnd |