5204936653
- Defaulted to single-user installation. - Fixed detection and uninstallation previous versions. - Made installation of source code and OpenAL drivers optional. - Reduced size by using a solid archive. - Streamlined installation process. - Reduced start menu shortcuts.
243 lines
7.7 KiB
Text
243 lines
7.7 KiB
Text
; Script generated by the HM NIS Edit Script Wizard.
|
|
RequestExecutionLevel user
|
|
|
|
!include x64.nsh
|
|
!include WordFunc.nsh
|
|
!insertmacro VersionCompare
|
|
!include LogicLib.nsh
|
|
|
|
SetCompressor /SOLID lzma
|
|
|
|
; HM NIS Edit Wizard helper defines
|
|
!define PRODUCT_NAME "OpenTK"
|
|
!define PRODUCT_VERSION "1.0" ; To be replaced by Build.exe
|
|
;!define PRODUCT_VERSION_REVISION "{{revision}}" ; To be replaced by Build.exe
|
|
;!define PRODUCT_VERSION_EXTRA "{{extra}}" ; To be replaced by Build.exe
|
|
!define PRODUCT_PUBLISHER "The Open Toolkit team"
|
|
!define PRODUCT_WEB_SITE "http://www.opentk.com"
|
|
!define PRODUCT_UNINST_KEY "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
|
|
!define DOTNET20_PUBLIC_ASSEMBLIES_KEY "SOFTWARE\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx\${PRODUCT_NAME} ${PRODUCT_VERSION}"
|
|
|
|
!define MULTIUSER_EXECUTIONLEVEL User
|
|
!define MULTIUSER_INSTALLMODE_DEFAULT_CURRENTUSER
|
|
!define MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY "SHELL_CONTEXT"
|
|
!define MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME "InstallDir"
|
|
!define MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY "SHELL_CONTEXT"
|
|
!define MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME "InstallDir"
|
|
!define MULTIUSER_INSTALLMODE_INSTDIR "${PRODUCT_NAME}\${PRODUCT_VERSION}"
|
|
;!include MultiUser.nsh ; Doesn't really do what we need to (goes to AppData instead of Documents, no x64 support)
|
|
|
|
; MUI 1.67 compatible ------
|
|
!include "MUI.nsh"
|
|
|
|
; MUI Settings
|
|
!define MUI_ABORTWARNING
|
|
!define MUI_ICON "..\..\Source\Examples\Resources\App.ico"
|
|
!define MUI_UNICON "..\..\Source\Examples\Resources\App.ico"
|
|
|
|
; Language Selection Dialog Settings
|
|
!define MUI_LANGDLL_REGISTRY_ROOT "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY}"
|
|
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
|
|
!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"
|
|
|
|
; Welcome page
|
|
;!insertmacro MUI_PAGE_WELCOME
|
|
; License page;
|
|
!insertmacro MUI_PAGE_LICENSE "..\..\Documentation\License.txt"
|
|
; Directory page
|
|
!insertmacro MUI_PAGE_DIRECTORY
|
|
; Components page
|
|
!insertmacro MUI_PAGE_COMPONENTS
|
|
; Instfiles page
|
|
!insertmacro MUI_PAGE_INSTFILES
|
|
; Finish page
|
|
!insertmacro MUI_PAGE_FINISH
|
|
|
|
; Uninstaller pages
|
|
!insertmacro MUI_UNPAGE_INSTFILES
|
|
|
|
; Language files
|
|
!insertmacro MUI_LANGUAGE "English"
|
|
|
|
; Reserve files
|
|
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
|
|
|
|
; MUI END ------
|
|
|
|
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
|
|
OutFile "opentk.exe"
|
|
InstallDir "${MULTIUSER_INSTALLMODE_INSTDIR}"
|
|
ShowInstDetails show
|
|
ShowUnInstDetails show
|
|
|
|
Function .onInit
|
|
StrCpy $INSTDIR "$DOCUMENTS\${MULTIUSER_INSTALLMODE_INSTDIR}"
|
|
|
|
!insertmacro MUI_LANGDLL_DISPLAY
|
|
FunctionEnd
|
|
|
|
; The "" makes the section hidden.
|
|
Section "" SecUninstallPrevious
|
|
|
|
Call UninstallPrevious
|
|
|
|
SectionEnd
|
|
|
|
Function UninstallPrevious
|
|
|
|
; Check for uninstaller.
|
|
ReadRegStr $R0 ${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString"
|
|
ReadRegStr $R1 ${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY} "${PRODUCT_UNINST_KEY}" "InstallDir"
|
|
|
|
${If} $R0 == ""
|
|
Goto Done
|
|
${EndIf}
|
|
|
|
DetailPrint "Removing previous installation."
|
|
|
|
; Run the uninstaller silently.
|
|
; The "if" is necessary becaused older installer versions
|
|
; did not set "InstallDir".
|
|
CopyFiles "$R0" "$TEMP\uninst.exe"
|
|
${If} $R1 != ""
|
|
ExecWait '$TEMP\uninst.exe /S _?=$R1'
|
|
${Else}
|
|
Push $R0
|
|
Call GetParent
|
|
Pop $R0
|
|
ExecWait '$TEMP\uninst.exe /S _?=$R0'
|
|
${EndIf}
|
|
|
|
Done:
|
|
|
|
FunctionEnd
|
|
|
|
; GetParent
|
|
; input, top of stack (e.g. C:\Program Files\Poop)
|
|
; output, top of stack (replaces, with e.g. C:\Program Files)
|
|
; modifies no other variables.
|
|
;
|
|
; Usage:
|
|
; Push "C:\Program Files\Directory\Whatever"
|
|
; Call GetParent
|
|
; Pop $R0
|
|
; ; at this point $R0 will equal "C:\Program Files\Directory"
|
|
Function GetParent
|
|
|
|
Exch $R0
|
|
Push $R1
|
|
Push $R2
|
|
Push $R3
|
|
|
|
StrCpy $R1 0
|
|
StrLen $R2 $R0
|
|
|
|
loop:
|
|
IntOp $R1 $R1 + 1
|
|
IntCmp $R1 $R2 get 0 get
|
|
StrCpy $R3 $R0 1 -$R1
|
|
StrCmp $R3 "\" get
|
|
Goto loop
|
|
|
|
get:
|
|
StrCpy $R0 $R0 -$R1
|
|
|
|
Pop $R3
|
|
Pop $R2
|
|
Pop $R1
|
|
Exch $R0
|
|
|
|
FunctionEnd
|
|
|
|
Section "OpenTK Library (required)" SEC01
|
|
SectionIn RO
|
|
|
|
${If} $INSTDIR == $PROGRAMFILES
|
|
${OrIf} $INSTDIR == $DOCUMENTS
|
|
${OrIf} $INSTDIR == $DESKTOP
|
|
${OrIf} $INSTDIR == $WINDIR
|
|
${OrIf} $INSTDIR == $SYSDIR
|
|
${OrIf} $INSTDIR == $PROFILE
|
|
MessageBox MB_OK "Cannot install directly under $INSTDIR. Please specify a subfolder."
|
|
Abort
|
|
${EndIf}
|
|
|
|
SetOutPath $INSTDIR
|
|
File /r /x *.vshost.exe /x *.vshost.exe.manifest /x *.log ..\..\Binaries
|
|
File /r /x .svn /x Source /x Source\*.* ..\..\Documentation
|
|
SectionEnd
|
|
|
|
Section "Source code" SEC02
|
|
SetOutPath $INSTDIR
|
|
File /r /x .svn /x obj /x *.snk /x *.user /x *.pidb /x html /x latex /x OpenTK*.xml ..\..\Source
|
|
File /r /x .svn ..\..\*.csproj
|
|
File ..\..\*.sln
|
|
File /r /x .svn /x opentk-actual.* /x *.exe /x *.msi /x *.deb /x *.rpm ..\..\Installers
|
|
SectionEnd
|
|
|
|
Section "OpenAL drivers" SEC03
|
|
SetOutPath $INSTDIR\Installers\Dependencies
|
|
File ..\..\Installers\Dependencies\oalinst.exe
|
|
ExecShell "open" '"$INSTDIR\Installers\Dependencies\oalinst.exe"' /S
|
|
SectionEnd
|
|
|
|
Section -AdditionalIcons
|
|
SetOutPath $INSTDIR
|
|
WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
|
|
CreateDirectory "$SMPROGRAMS\OpenTK"
|
|
;CreateShortCut "$SMPROGRAMS\OpenTK\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
|
|
CreateShortCut "$SMPROGRAMS\OpenTK\Examples.lnk" "$INSTDIR\Binaries\OpenTK\Release\Examples.exe"
|
|
CreateShortCut "$SMPROGRAMS\OpenTK\Reference.lnk" "$INSTDIR\Documentation\Reference.pdf"
|
|
CreateShortCut "$SMPROGRAMS\OpenTK\Manual.lnk" "$INSTDIR\Documentation\Manual.pdf"
|
|
;CreateShortCut "$SMPROGRAMS\OpenTK\Release.lnk" "$INSTDIR\Documentation\Release.txt"
|
|
SectionEnd
|
|
|
|
Section -Post
|
|
${If} ${RunningX64}
|
|
SetRegView 64
|
|
${EndIf}
|
|
WriteUninstaller "$INSTDIR\uninst.exe"
|
|
WriteRegStr ${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
|
|
WriteRegStr ${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY} "${PRODUCT_UNINST_KEY}" "InstallDir" "$INSTDIR"
|
|
WriteRegStr ${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
|
|
WriteRegStr ${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
|
|
WriteRegStr ${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
|
|
WriteRegStr ${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
|
|
WriteRegStr ${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY} "${DOTNET20_PUBLIC_ASSEMBLIES_KEY}" "" "$INSTDIR\Binaries\OpenTK\Release"
|
|
SectionEnd
|
|
|
|
Function un.onUninstSuccess
|
|
HideWindow
|
|
FunctionEnd
|
|
|
|
Function un.onInit
|
|
!insertmacro MUI_UNGETLANGUAGE
|
|
IfSilent +3
|
|
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you wish to completely uninstall $(^Name) and all of its components?" IDYES +2
|
|
Abort
|
|
FunctionEnd
|
|
|
|
Section Uninstall
|
|
${If} ${RunningX64}
|
|
SetRegView 64
|
|
${EndIf}
|
|
|
|
Delete "$INSTDIR\${PRODUCT_NAME}.url"
|
|
Delete "$INSTDIR\uninst.exe"
|
|
|
|
RMDir /r "$SMPROGRAMS\OpenTK"
|
|
|
|
Delete "$INSTDIR\*.sln"
|
|
Delete "$INSTDIR\Build.exe"
|
|
Delete "$INSTDIR\*.log"
|
|
RMDir /r "$INSTDIR\Installers"
|
|
RMDir /r "$INSTDIR\Source"
|
|
RMDir /r "$INSTDIR\Documentation"
|
|
RMDir /r "$INSTDIR\Binaries"
|
|
RMDir "$INSTDIR"
|
|
|
|
|
|
DeleteRegKey ${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY} "${PRODUCT_UNINST_KEY}"
|
|
DeleteRegKey ${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY} "${DOTNET20_PUBLIC_ASSEMBLIES_KEY}"
|
|
SetAutoClose true
|
|
SectionEnd
|