VLC media player: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
No edit summary
 
No edit summary
Line 6: Line 6:
<highlight-nsis>
<highlight-nsis>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; NSIS installer script for vlc ;
; NSIS installer script for vlc ;
; (http://nsis.sourceforge.net) ;
; (http://nsis.sourceforge.net) ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


!define PRODUCT_NAME "VLC media player"
!define PRODUCT_NAME "VLC media player"
!define PRODUCT_VERSION '${VERSION}'
!define PRODUCT_VERSION '${VERSION}'
!define PRODUCT_GROUP "VideoLAN"
!define PRODUCT_GROUP "VideoLAN"
!define PRODUCT_PUBLISHER "VideoLAN Team"
!define PRODUCT_PUBLISHER "VideoLAN Team"
!define PRODUCT_WEB_SITE "http://www.videolan.org"
!define PRODUCT_WEB_SITE "http://www.videolan.org"
!define PRODUCT_DIR_REGKEY "Software\VideoLAN\VLC"
!define PRODUCT_DIR_REGKEY "Software\VideoLAN\VLC"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define PRODUCT_ID "{ea92ef52-afe4-4212-bacb-dfe9fca94cd6}"
!define PRODUCT_ID "{ea92ef52-afe4-4212-bacb-dfe9fca94cd6}"
!define MUI_LANGDLL_REGISTRY_ROOT "HKLM"
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_DIR_REGKEY}"
!define MUI_LANGDLL_REGISTRY_VALUENAME "Language"


@FILE_LIBVLC_DLL@
@FILE_LIBVLC_DLL@


;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;
; General configuration ;
; General configuration ;
;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;


Name "${PRODUCT_GROUP} ${PRODUCT_NAME} ${PRODUCT_VERSION}"
Name "${PRODUCT_GROUP} ${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile ..\vlc-${VERSION}-win32.exe
OutFile ..\vlc-${VERSION}-win32.exe
InstallDir "$PROGRAMFILES\VideoLAN\VLC"
InstallDir "$PROGRAMFILES\VideoLAN\VLC"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
!ifdef NSIS_LZMA_COMPRESS_WHOLE
!ifdef NSIS_LZMA_COMPRESS_WHOLE
SetCompressor lzma
SetCompressor lzma
!else
!else
SetCompressor /SOLID lzma
SetCompressor /SOLID lzma
!endif
!endif
;ShowInstDetails show
;ShowInstDetails show
;ShowUnInstDetails show
;ShowUnInstDetails show
SetOverwrite ifnewer
SetOverwrite ifnewer
CRCCheck on
CRCCheck on


InstType "Recommended"
InstType "Recommended"
InstType "Minimum"
InstType "Minimum"
InstType "Full"
InstType "Full"


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; NSIS Modern User Interface configuration ;
; NSIS Modern User Interface configuration ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


; MUI 1.67 compatible ------
; MUI 1.67 compatible ------
   !include "MUI.nsh"
   !include "MUI.nsh"


; MUI Settings
; MUI Settings
   !define MUI_ABORTWARNING
   !define MUI_ABORTWARNING
   !define MUI_ICON "vlc48x48.ico"
   !define MUI_ICON "vlc48x48.ico"
   !define MUI_UNICON "vlc48x48.ico"
   !define MUI_UNICON "vlc48x48.ico"
   !define MUI_COMPONENTSPAGE_SMALLDESC
   !define MUI_COMPONENTSPAGE_SMALLDESC


; Installer pages
; Installer pages
   ; Welcome page
   ; Welcome page
     !define MUI_WELCOMEPAGE_TITLE_3LINES
     !define MUI_WELCOMEPAGE_TITLE_3LINES
     !insertmacro MUI_PAGE_WELCOME
     !insertmacro MUI_PAGE_WELCOME
   ; License page
   ; License page
     !insertmacro MUI_PAGE_LICENSE "COPYING.txt"
     !insertmacro MUI_PAGE_LICENSE "COPYING.txt"
   ; Components page
   ; Components page
     !insertmacro MUI_PAGE_COMPONENTS
     !insertmacro MUI_PAGE_COMPONENTS
   ; Directory page
   ; Directory page
     !insertmacro MUI_PAGE_DIRECTORY
     !insertmacro MUI_PAGE_DIRECTORY
   ; Instfiles page
   ; Instfiles page
     !insertmacro MUI_PAGE_INSTFILES
     !insertmacro MUI_PAGE_INSTFILES
   ; Finish page
   ; Finish page
     !define MUI_FINISHPAGE_RUN "$INSTDIR\vlc.exe"
     !define MUI_FINISHPAGE_RUN "$INSTDIR\vlc.exe"
     !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\README.txt"
     !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\README.txt"
     !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
     !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
     !define MUI_FINISHPAGE_LINK "Visit the VideoLAN VLC media player Website"
     !define MUI_FINISHPAGE_LINK "Visit the VideoLAN VLC media player Website"
     !define MUI_FINISHPAGE_LINK_LOCATION "http://www.videolan.org/vlc/"
     !define MUI_FINISHPAGE_LINK_LOCATION "http://www.videolan.org/vlc/"
     !define MUI_FINISHPAGE_NOREBOOTSUPPORT
     !define MUI_FINISHPAGE_NOREBOOTSUPPORT
     !insertmacro MUI_PAGE_FINISH
     !insertmacro MUI_PAGE_FINISH


; Uninstaller pages
; Uninstaller pages
     !insertmacro MUI_UNPAGE_CONFIRM
     !insertmacro MUI_UNPAGE_CONFIRM
     !insertmacro MUI_UNPAGE_COMPONENTS
     !insertmacro MUI_UNPAGE_COMPONENTS
     !insertmacro MUI_UNPAGE_INSTFILES
     !insertmacro MUI_UNPAGE_INSTFILES
     !insertmacro MUI_UNPAGE_FINISH
     !insertmacro MUI_UNPAGE_FINISH


; Language files
; Language files
   !insertmacro MUI_LANGUAGE "English" # first language is the default language
   !insertmacro MUI_LANGUAGE "English" # first language is the default language
   !insertmacro MUI_LANGUAGE "French"
   !insertmacro MUI_LANGUAGE "French"
   !insertmacro MUI_LANGUAGE "German"
   !insertmacro MUI_LANGUAGE "German"
   !insertmacro MUI_LANGUAGE "Spanish"
   !insertmacro MUI_LANGUAGE "Spanish"
   !insertmacro MUI_LANGUAGE "SimpChinese"
   !insertmacro MUI_LANGUAGE "SimpChinese"
   !insertmacro MUI_LANGUAGE "TradChinese"
   !insertmacro MUI_LANGUAGE "TradChinese"
   !insertmacro MUI_LANGUAGE "Japanese"
   !insertmacro MUI_LANGUAGE "Japanese"
   !insertmacro MUI_LANGUAGE "Korean"
   !insertmacro MUI_LANGUAGE "Korean"
   !insertmacro MUI_LANGUAGE "Italian"
   !insertmacro MUI_LANGUAGE "Italian"
   !insertmacro MUI_LANGUAGE "Dutch"
   !insertmacro MUI_LANGUAGE "Dutch"
   !insertmacro MUI_LANGUAGE "Danish"
   !insertmacro MUI_LANGUAGE "Danish"
   !insertmacro MUI_LANGUAGE "Swedish"
   !insertmacro MUI_LANGUAGE "Swedish"
   !insertmacro MUI_LANGUAGE "Norwegian"
   !insertmacro MUI_LANGUAGE "Norwegian"
   !insertmacro MUI_LANGUAGE "Finnish"
   !insertmacro MUI_LANGUAGE "Finnish"
   !insertmacro MUI_LANGUAGE "Greek"
   !insertmacro MUI_LANGUAGE "Greek"
   !insertmacro MUI_LANGUAGE "Russian"
   !insertmacro MUI_LANGUAGE "Russian"
   !insertmacro MUI_LANGUAGE "Portuguese"
   !insertmacro MUI_LANGUAGE "Portuguese"
   !insertmacro MUI_LANGUAGE "Arabic"
   !insertmacro MUI_LANGUAGE "Arabic"
   !insertmacro MUI_LANGUAGE "Polish"
   !insertmacro MUI_LANGUAGE "Polish"


!insertmacro MUI_RESERVEFILE_LANGDLL
!insertmacro MUI_RESERVEFILE_LANGDLL


; Reserve files
; Reserve files
   !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
   !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS


; MUI end ------
; MUI end ------


;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;
; Extension lists ;
; Extension lists ;
;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;


!macro MacroAudioExtensions _action
!macro MacroAudioExtensions _action
   !insertmacro ${_action} ".a52"
   !insertmacro ${_action} ".a52"
   !insertmacro ${_action} ".aac"
   !insertmacro ${_action} ".aac"
   !insertmacro ${_action} ".ac3"
   !insertmacro ${_action} ".ac3"
   !insertmacro ${_action} ".dts"
   !insertmacro ${_action} ".dts"
   !insertmacro ${_action} ".flac"
   !insertmacro ${_action} ".flac"
   !insertmacro ${_action} ".mka"
   !insertmacro ${_action} ".mka"
   !insertmacro ${_action} ".mp1"
   !insertmacro ${_action} ".mp1"
   !insertmacro ${_action} ".mp2"
   !insertmacro ${_action} ".mp2"
   !insertmacro ${_action} ".mp3"
   !insertmacro ${_action} ".mp3"
   !insertmacro ${_action} ".ogg"
   !insertmacro ${_action} ".ogg"
   !insertmacro ${_action} ".spx"
   !insertmacro ${_action} ".spx"
   !insertmacro ${_action} ".wav"
   !insertmacro ${_action} ".wav"
   !insertmacro ${_action} ".wma"
   !insertmacro ${_action} ".wma"
!macroend
!macroend


!macro MacroVideoExtensions _action
!macro MacroVideoExtensions _action
   !insertmacro ${_action} ".asf"
   !insertmacro ${_action} ".asf"
   !insertmacro ${_action} ".avi"
   !insertmacro ${_action} ".avi"
   !insertmacro ${_action} ".divx"
   !insertmacro ${_action} ".divx"
   !insertmacro ${_action} ".dv"
   !insertmacro ${_action} ".dv"
   !insertmacro ${_action} ".m1v"
   !insertmacro ${_action} ".m1v"
   !insertmacro ${_action} ".m2v"
   !insertmacro ${_action} ".m2v"
   !insertmacro ${_action} ".mkv"
   !insertmacro ${_action} ".mkv"
   !insertmacro ${_action} ".mov"
   !insertmacro ${_action} ".mov"
   !insertmacro ${_action} ".mp4"
   !insertmacro ${_action} ".mp4"
   !insertmacro ${_action} ".mpeg"
   !insertmacro ${_action} ".mpeg"
   !insertmacro ${_action} ".mpeg1"
   !insertmacro ${_action} ".mpeg1"
   !insertmacro ${_action} ".mpeg2"
   !insertmacro ${_action} ".mpeg2"
   !insertmacro ${_action} ".mpeg4"
   !insertmacro ${_action} ".mpeg4"
   !insertmacro ${_action} ".mpg"
   !insertmacro ${_action} ".mpg"
   !insertmacro ${_action} ".ps"
   !insertmacro ${_action} ".ps"
   !insertmacro ${_action} ".ts"
   !insertmacro ${_action} ".ts"
   !insertmacro ${_action} ".ogm"
   !insertmacro ${_action} ".ogm"
   !insertmacro ${_action} ".vob"
   !insertmacro ${_action} ".vob"
   !insertmacro ${_action} ".wmv"
   !insertmacro ${_action} ".wmv"
!macroend
!macroend


!macro MacroOtherExtensions _action
!macro MacroOtherExtensions _action
   !insertmacro ${_action} ".asx"
   !insertmacro ${_action} ".asx"
   !insertmacro ${_action} ".bin"
   !insertmacro ${_action} ".bin"
   !insertmacro ${_action} ".cue"
   !insertmacro ${_action} ".cue"
   !insertmacro ${_action} ".m3u"
   !insertmacro ${_action} ".m3u"
   !insertmacro ${_action} ".pls"
   !insertmacro ${_action} ".pls"
   !insertmacro ${_action} ".vlc"
   !insertmacro ${_action} ".vlc"
!macroend
!macroend


!macro MacroAllExtensions _action
!macro MacroAllExtensions _action
   !insertmacro MacroAudioExtensions ${_action}
   !insertmacro MacroAudioExtensions ${_action}
   !insertmacro MacroVideoExtensions ${_action}
   !insertmacro MacroVideoExtensions ${_action}
   !insertmacro MacroOtherExtensions ${_action}
   !insertmacro MacroOtherExtensions ${_action}
!macroend
!macroend


;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;
; File type associations ;
; File type associations ;
;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;


Function RegisterExtension
Function RegisterExtension
   ; back up old value for extension $R0 (eg. ".opt")
   ; back up old value for extension $R0 (eg. ".opt")
   ReadRegStr $1 HKCR "$R0" ""
   ReadRegStr $1 HKCR "$R0" ""
   StrCmp $1 "" NoBackup
   StrCmp $1 "" NoBackup
     StrCmp $1 "VLC$R0" "NoBackup"
     StrCmp $1 "VLC$R0" "NoBackup"
     WriteRegStr HKCR "$R0" "VLC.backup" $1
     WriteRegStr HKCR "$R0" "VLC.backup" $1
NoBackup:
NoBackup:
   WriteRegStr HKCR "$R0" "" "VLC$R0"
   WriteRegStr HKCR "$R0" "" "VLC$R0"
   ReadRegStr $0 HKCR "VLC$R0" ""
   ReadRegStr $0 HKCR "VLC$R0" ""
   WriteRegStr HKCR "VLC$R0" "" "VLC media file ($R0)"
   WriteRegStr HKCR "VLC$R0" "" "VLC media file ($R0)"
   WriteRegStr HKCR "VLC$R0\shell" "" "Play"
   WriteRegStr HKCR "VLC$R0\shell" "" "Play"
   WriteRegStr HKCR "VLC$R0\shell\Play\command" "" '"$INSTDIR\vlc.exe" --started-from-file "%1"'
   WriteRegStr HKCR "VLC$R0\shell\Play\command" "" '"$INSTDIR\vlc.exe" --started-from-file "%1"'
   WriteRegStr HKCR "VLC$R0\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'
   WriteRegStr HKCR "VLC$R0\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'
FunctionEnd
FunctionEnd


Function un.RegisterExtension
Function un.RegisterExtension
   ;start of restore script
   ;start of restore script
   ReadRegStr $1 HKCR "$R0" ""
   ReadRegStr $1 HKCR "$R0" ""
   StrCmp $1 "VLC$R0" 0 NoOwn ; only do this if we own it
   StrCmp $1 "VLC$R0" 0 NoOwn ; only do this if we own it
     ReadRegStr $1 HKCR "$R0" "VLC.backup"
     ReadRegStr $1 HKCR "$R0" "VLC.backup"
     StrCmp $1 "" 0 Restore ; if backup="" then delete the whole key
     StrCmp $1 "" 0 Restore ; if backup="" then delete the whole key
       DeleteRegKey HKCR "$R0"
       DeleteRegKey HKCR "$R0"
     Goto NoOwn
     Goto NoOwn
Restore:
Restore:
       WriteRegStr HKCR "$R0" "" $1
       WriteRegStr HKCR "$R0" "" $1
       DeleteRegValue HKCR "$R0" "VLC.backup"
       DeleteRegValue HKCR "$R0" "VLC.backup"
NoOwn:
NoOwn:
     DeleteRegKey HKCR "VLC$R0" ;Delete key with association settings
     DeleteRegKey HKCR "VLC$R0" ;Delete key with association settings
FunctionEnd
FunctionEnd


!macro RegisterExtensionSection EXT
!macro RegisterExtensionSection EXT
   Section ${EXT}
   Section ${EXT}
     SectionIn 1 3
     SectionIn 1 3
     Push $R0
     Push $R0
     StrCpy $R0 ${EXT}
     StrCpy $R0 ${EXT}
     Call RegisterExtension
     Call RegisterExtension
     Pop $R0
     Pop $R0
   SectionEnd
   SectionEnd
!macroend
!macroend


!macro UnRegisterExtensionSection EXT
!macro UnRegisterExtensionSection EXT
   Push $R0
   Push $R0
   StrCpy $R0 ${EXT}
   StrCpy $R0 ${EXT}
   Call un.RegisterExtension
   Call un.RegisterExtension
   Pop $R0
   Pop $R0
!macroend
!macroend


!macro WriteRegStrSupportedTypes EXT
!macro WriteRegStrSupportedTypes EXT
   WriteRegStr HKCR Applications\vlc.exe\SupportedTypes ${EXT} ""
   WriteRegStr HKCR Applications\vlc.exe\SupportedTypes ${EXT} ""
!macroend
!macroend


;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;
; Context menu entries ;
; Context menu entries ;
;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;


!macro AddContextMenu EXT
!macro AddContextMenu EXT
   WriteRegStr HKCR ${EXT}\shell\PlayWithVLC "" "Play with VLC media player"
   WriteRegStr HKCR ${EXT}\shell\PlayWithVLC "" "Play with VLC media player"
   WriteRegStr HKCR ${EXT}\shell\PlayWithVLC\command "" '$INSTDIR\vlc.exe --started-from-file --no-playlist-enqueue "%1"'
   WriteRegStr HKCR ${EXT}\shell\PlayWithVLC\command "" '$INSTDIR\vlc.exe --started-from-file --no-playlist-enqueue "%1"'


   WriteRegStr HKCR ${EXT}\shell\AddToPlaylistVLC "" "Add to VLC media player's Playlist"
   WriteRegStr HKCR ${EXT}\shell\AddToPlaylistVLC "" "Add to VLC media player's Playlist"
   WriteRegStr HKCR ${EXT}\shell\AddToPlaylistVLC\command "" '$INSTDIR\vlc.exe --started-from-file --playlist-enqueue "%1"'
   WriteRegStr HKCR ${EXT}\shell\AddToPlaylistVLC\command "" '$INSTDIR\vlc.exe --started-from-file --playlist-enqueue "%1"'
!macroend
!macroend


!macro DeleteContextMenu EXT
!macro DeleteContextMenu EXT
   DeleteRegKey HKCR ${EXT}\shell\PlayWithVLC
   DeleteRegKey HKCR ${EXT}\shell\PlayWithVLC
   DeleteRegKey HKCR ${EXT}\shell\AddToPlaylistVLC
   DeleteRegKey HKCR ${EXT}\shell\AddToPlaylistVLC
!macroend
!macroend


;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;
; Delete prefs and cache ;
; Delete prefs and cache ;
;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;


!macro delprefs
!macro delprefs
   StrCpy $0 0
   StrCpy $0 0
   !define Index 'Line${__LINE__}'
   !define Index 'Line${__LINE__}'
   "${Index}-Loop:"
   "${Index}-Loop:"
   ; FIXME
   ; FIXME
   ; this will loop through all the logged users and "virtual" windows users
   ; this will loop through all the logged users and "virtual" windows users
   ; (it looks like users are only present in HKEY_USERS when they are logged in)
   ; (it looks like users are only present in HKEY_USERS when they are logged in)
     ClearErrors
     ClearErrors
     EnumRegKey $1 HKU "" $0
     EnumRegKey $1 HKU "" $0
     StrCmp $1 "" "${Index}-End"
     StrCmp $1 "" "${Index}-End"
     IntOp $0 $0 + 1
     IntOp $0 $0 + 1
     ReadRegStr $2 HKU "$1\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" AppData
     ReadRegStr $2 HKU "$1\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" AppData
     StrCmp $2 "" "${Index}-Loop"
     StrCmp $2 "" "${Index}-Loop"
     RMDir /r "$2\vlc"
     RMDir /r "$2\vlc"
     Goto "${Index}-Loop"
     Goto "${Index}-Loop"
   "${Index}-End:"
   "${Index}-End:"
   !undef Index
   !undef Index
!macroend
!macroend


Var UninstallLog
Var UninstallLog


!macro OpenUninstallLog
!macro OpenUninstallLog
   FileOpen $UninstallLog "$INSTDIR\uninstall.log" a
   FileOpen $UninstallLog "$INSTDIR\uninstall.log" a
   FileSeek $UninstallLog 0 END
   FileSeek $UninstallLog 0 END
!macroend
!macroend


!macro CloseUninstallLog
!macro CloseUninstallLog
   FileClose $UninstallLog
   FileClose $UninstallLog
   SetFileAttributes "$INSTDIR\uninstall.log" HIDDEN
   SetFileAttributes "$INSTDIR\uninstall.log" HIDDEN
!macroend
!macroend


!macro InstallFile FILEREGEX
!macro InstallFile FILEREGEX
   File "${FILEREGEX}"
   File "${FILEREGEX}"
   !define Index 'Line${__LINE__}'
   !define Index 'Line${__LINE__}'
   FindFirst $0 $1 "$INSTDIR\${FILEREGEX}"
   FindFirst $0 $1 "$INSTDIR\${FILEREGEX}"
   StrCmp $0 "" "${Index}-End"
   StrCmp $0 "" "${Index}-End"
   "${Index}-Loop:"
   "${Index}-Loop:"
     StrCmp $1 "" "${Index}-End"
     StrCmp $1 "" "${Index}-End"
     FileWrite $UninstallLog "$1$\r$\n"
     FileWrite $UninstallLog "$1$\r$\n"
     FindNext $0 $1
     FindNext $0 $1
     Goto "${Index}-Loop"
     Goto "${Index}-Loop"
   "${Index}-End:"
   "${Index}-End:"
   !undef Index
   !undef Index
!macroend
!macroend


!macro InstallFolder FOLDER
!macro InstallFolder FOLDER
   File /r "${FOLDER}"
   File /r "${FOLDER}"
   Push "${FOLDER}"
   Push "${FOLDER}"
   Call InstallFolderInternal
   Call InstallFolderInternal
!macroend
!macroend


Function InstallFolderInternal
Function InstallFolderInternal
   Pop $9
   Pop $9
   !define Index 'Line${__LINE__}'
   !define Index 'Line${__LINE__}'
   FindFirst $0 $1 "$INSTDIR\$9\*"
   FindFirst $0 $1 "$INSTDIR\$9\*"
   StrCmp $0 "" "${Index}-End"
   StrCmp $0 "" "${Index}-End"
   "${Index}-Loop:"
   "${Index}-Loop:"
     StrCmp $1 "" "${Index}-End"
     StrCmp $1 "" "${Index}-End"
     StrCmp $1 "." "${Index}-Next"
     StrCmp $1 "." "${Index}-Next"
     StrCmp $1 ".." "${Index}-Next"
     StrCmp $1 ".." "${Index}-Next"
     IfFileExists "$9\$1\*" 0 "${Index}-Write"
     IfFileExists "$9\$1\*" 0 "${Index}-Write"
       Push $0
       Push $0
       Push $9
       Push $9
       Push "$9\$1"
       Push "$9\$1"
       Call InstallFolderInternal
       Call InstallFolderInternal
       Pop $9
       Pop $9
       Pop $0
       Pop $0
       Goto "${Index}-Next"
       Goto "${Index}-Next"
     "${Index}-Write:"
     "${Index}-Write:"
     FileWrite $UninstallLog "$9\$1$\r$\n"
     FileWrite $UninstallLog "$9\$1$\r$\n"
     "${Index}-Next:"
     "${Index}-Next:"
     FindNext $0 $1
     FindNext $0 $1
     Goto "${Index}-Loop"
     Goto "${Index}-Loop"
   "${Index}-End:"
   "${Index}-End:"
   !undef Index
   !undef Index
FunctionEnd
FunctionEnd




;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;
; Installer sections ;
; Installer sections ;
;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;


Section "Media player (required)" SEC01
Section "Media player (required)" SEC01
   SectionIn 1 2 3 RO
   SectionIn 1 2 3 RO
   SetShellVarContext all
   SetShellVarContext all
   SetOutPath "$INSTDIR"
   SetOutPath "$INSTDIR"


   !insertmacro OpenUninstallLog
   !insertmacro OpenUninstallLog


   !insertmacro InstallFile vlc.exe
   !insertmacro InstallFile vlc.exe
   !insertmacro InstallFile vlc.exe.manifest
   !insertmacro InstallFile vlc.exe.manifest
   !ifdef LIBVLC_DLL
   !ifdef LIBVLC_DLL
   !insertmacro InstallFile ${LIBVLC_DLL}
   !insertmacro InstallFile ${LIBVLC_DLL}
   !endif
   !endif
   !insertmacro InstallFile *.txt
   !insertmacro InstallFile *.txt


   !insertmacro InstallFolder plugins
   !insertmacro InstallFolder plugins
   !insertmacro InstallFolder locale
   !insertmacro InstallFolder locale
   !insertmacro InstallFolder osdmenu
   !insertmacro InstallFolder osdmenu
   !insertmacro InstallFolder skins
   !insertmacro InstallFolder skins
   !insertmacro InstallFolder http
   !insertmacro InstallFolder http


   WriteIniStr "$INSTDIR\${PRODUCT_GROUP} Website.url" "InternetShortcut" "URL" \
   WriteIniStr "$INSTDIR\${PRODUCT_GROUP} Website.url" "InternetShortcut" "URL" \
     "${PRODUCT_WEB_SITE}"
     "${PRODUCT_WEB_SITE}"
   FileWrite $UninstallLog "${PRODUCT_GROUP} Website.url$\r$\n"
   FileWrite $UninstallLog "${PRODUCT_GROUP} Website.url$\r$\n"
   WriteIniStr "$INSTDIR\Documentation.url" "InternetShortcut" "URL" \
   WriteIniStr "$INSTDIR\Documentation.url" "InternetShortcut" "URL" \
     "${PRODUCT_WEB_SITE}/doc/"
     "${PRODUCT_WEB_SITE}/doc/"
   FileWrite $UninstallLog "Documentation.url$\r$\n"
   FileWrite $UninstallLog "Documentation.url$\r$\n"


   !insertmacro CloseUninstallLog
   !insertmacro CloseUninstallLog


   ; Add VLC to "recomended programs" for the following extensions
   ; Add VLC to "recomended programs" for the following extensions
   WriteRegStr HKCR Applications\vlc.exe "" ""
   WriteRegStr HKCR Applications\vlc.exe "" ""
   WriteRegStr HKCR Applications\vlc.exe "FriendlyAppName" "VLC media player"
   WriteRegStr HKCR Applications\vlc.exe "FriendlyAppName" "VLC media player"
   WriteRegStr HKCR Applications\vlc.exe\shell\Play "" "Play with VLC"
   WriteRegStr HKCR Applications\vlc.exe\shell\Play "" "Play with VLC"
   WriteRegStr HKCR Applications\vlc.exe\shell\Play\command "" \
   WriteRegStr HKCR Applications\vlc.exe\shell\Play\command "" \
     '$INSTDIR\vlc.exe --started-from-file "%1"'
     '$INSTDIR\vlc.exe --started-from-file "%1"'
   !insertmacro MacroAllExtensions WriteRegStrSupportedTypes
   !insertmacro MacroAllExtensions WriteRegStrSupportedTypes


   WriteRegStr HKCR "AudioCD\shell\PlayWithVLC" "" "Play with VLC media player"
   WriteRegStr HKCR "AudioCD\shell\PlayWithVLC" "" "Play with VLC media player"
   WriteRegStr HKCR "AudioCD\shell\PlayWithVLC\command" "" \
   WriteRegStr HKCR "AudioCD\shell\PlayWithVLC\command" "" \
     "$INSTDIR\vlc.exe --started-from-file cdda:%1"
     "$INSTDIR\vlc.exe --started-from-file cdda:%1"
   WriteRegStr HKCR "DVD\shell\PlayWithVLC" "" "Play with VLC media player"
   WriteRegStr HKCR "DVD\shell\PlayWithVLC" "" "Play with VLC media player"
   WriteRegStr HKCR "DVD\shell\PlayWithVLC\command" "" \
   WriteRegStr HKCR "DVD\shell\PlayWithVLC\command" "" \
     "$INSTDIR\vlc.exe --started-from-file dvd:%1"
     "$INSTDIR\vlc.exe --started-from-file dvd:%1"


   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayDVDMovieOnArrival" "VLCPlayDVDMovieOnArrival" ""
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayDVDMovieOnArrival" "VLCPlayDVDMovieOnArrival" ""
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "Action" "Play DVD movie"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "Action" "Play DVD movie"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "DefaultIcon" '"$INSTDIR\vlc.exe",0'
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "DefaultIcon" '"$INSTDIR\vlc.exe",0'
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "InvokeProgID" "VLC.DVDMovie"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "InvokeProgID" "VLC.DVDMovie"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "InvokeVerb" "play"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "InvokeVerb" "play"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "Provider" "VideoLAN VLC media player"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "Provider" "VideoLAN VLC media player"


   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayCDAudioOnArrival" "VLCPlayCDAudioOnArrival" ""
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayCDAudioOnArrival" "VLCPlayCDAudioOnArrival" ""
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "Action" "Play CD audio"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "Action" "Play CD audio"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "DefaultIcon" '"$INSTDIR\vlc.exe --started-from-file",0'
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "DefaultIcon" '"$INSTDIR\vlc.exe --started-from-file",0'
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "InvokeProgID" "VLC.CDAudio"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "InvokeProgID" "VLC.CDAudio"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "InvokeVerb" "play"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "InvokeVerb" "play"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "Provider" "VideoLAN VLC media player"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "Provider" "VideoLAN VLC media player"
   WriteRegStr HKCR "VLC.DVDMovie" "" "VLC DVD Movie"
   WriteRegStr HKCR "VLC.DVDMovie" "" "VLC DVD Movie"
   WriteRegStr HKCR "VLC.DVDMovie\shell" "" "Play"
   WriteRegStr HKCR "VLC.DVDMovie\shell" "" "Play"
   WriteRegStr HKCR "VLC.DVDMovie\shell\Play\command" "" \
   WriteRegStr HKCR "VLC.DVDMovie\shell\Play\command" "" \
     '$INSTDIR\vlc.exe --started-from-file dvd:%1'
     '$INSTDIR\vlc.exe --started-from-file dvd:%1'
   WriteRegStr HKCR "VLC.DVDMovie\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'
   WriteRegStr HKCR "VLC.DVDMovie\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'
   WriteRegStr HKCR "VLC.CDAudio" "" "VLC CD Audio"
   WriteRegStr HKCR "VLC.CDAudio" "" "VLC CD Audio"
   WriteRegStr HKCR "VLC.CDAudio\shell" "" "Play"
   WriteRegStr HKCR "VLC.CDAudio\shell" "" "Play"
   WriteRegStr HKCR "VLC.CDAudio\shell\Play\command" "" \
   WriteRegStr HKCR "VLC.CDAudio\shell\Play\command" "" \
     '$INSTDIR\vlc.exe --started-from-file cdda:%1'
     '$INSTDIR\vlc.exe --started-from-file cdda:%1'
   WriteRegStr HKCR "VLC.CDAudio\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'
   WriteRegStr HKCR "VLC.CDAudio\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'


SectionEnd
SectionEnd


Section "Start Menu Shortcut" SEC02a
Section "Start Menu Shortcut" SEC02a
   SectionIn 1 2 3
   SectionIn 1 2 3
   CreateDirectory "$SMPROGRAMS\VideoLAN"
   CreateDirectory "$SMPROGRAMS\VideoLAN"
   CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings"
   CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings"
   CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Audio"
   CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Audio"
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Audio\Set Audio mode to DirectX (default).lnk" \
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Audio\Set Audio mode to DirectX (default).lnk" \
     "$INSTDIR\vlc.exe" "--aout aout_directx --save-config vlc:quit"
     "$INSTDIR\vlc.exe" "--aout aout_directx --save-config vlc:quit"
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Audio\Set Audio mode to Waveout.lnk" \
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Audio\Set Audio mode to Waveout.lnk" \
     "$INSTDIR\vlc.exe" "--aout waveout --save-config vlc:quit"
     "$INSTDIR\vlc.exe" "--aout waveout --save-config vlc:quit"
   CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Interface"
   CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Interface"
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Interface\Set Main Interface to Skinnable.lnk" \
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Interface\Set Main Interface to Skinnable.lnk" \
     "$INSTDIR\vlc.exe" "-I skins --save-config vlc:quit"
     "$INSTDIR\vlc.exe" "-I skins --save-config vlc:quit"
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Interface\Set Main Interface to wxWidgets (default).lnk" \
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Interface\Set Main Interface to wxWidgets (default).lnk" \
     "$INSTDIR\vlc.exe" "-I wxwin --save-config vlc:quit"
     "$INSTDIR\vlc.exe" "-I wxwin --save-config vlc:quit"
   CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Video"
   CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Video"
   ; FIXME add detection for Vista. Direct3D will be default there, for all others it's DirectX
   ; FIXME add detection for Vista. Direct3D will be default there, for all others it's DirectX
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to Direct3D.lnk" \
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to Direct3D.lnk" \
     "$INSTDIR\vlc.exe" "--vout direct3d --overlay --directx-hw-yuv --save-config vlc:quit"
     "$INSTDIR\vlc.exe" "--vout direct3d --overlay --directx-hw-yuv --save-config vlc:quit"
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to Direct3D (no hardware acceleration).lnk" \
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to Direct3D (no hardware acceleration).lnk" \
     "$INSTDIR\vlc.exe" "--vout direct3d --overlay --no-directx-hw-yuv --save-config vlc:quit"
     "$INSTDIR\vlc.exe" "--vout direct3d --overlay --no-directx-hw-yuv --save-config vlc:quit"
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX.lnk" \
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX.lnk" \
     "$INSTDIR\vlc.exe" "--vout directx --overlay --directx-hw-yuv --save-config vlc:quit"
     "$INSTDIR\vlc.exe" "--vout directx --overlay --directx-hw-yuv --save-config vlc:quit"
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX (no hardware acceleration).lnk" \
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX (no hardware acceleration).lnk" \
     "$INSTDIR\vlc.exe" "--vout directx --no-overlay --no-directx-hw-yuv --save-config vlc:quit"
     "$INSTDIR\vlc.exe" "--vout directx --no-overlay --no-directx-hw-yuv --save-config vlc:quit"
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX (no video overlay).lnk" \
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX (no video overlay).lnk" \
     "$INSTDIR\vlc.exe" "--vout directx --no-overlay --directx-hw-yuv --save-config vlc:quit"
     "$INSTDIR\vlc.exe" "--vout directx --no-overlay --directx-hw-yuv --save-config vlc:quit"
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to OpenGL.lnk" \
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to OpenGL.lnk" \
     "$INSTDIR\vlc.exe" "--vout opengl --overlay --save-config vlc:quit"
     "$INSTDIR\vlc.exe" "--vout opengl --overlay --save-config vlc:quit"
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Reset VLC media player preferences and cache files.lnk" \
   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Reset VLC media player preferences and cache files.lnk" \
     "$INSTDIR\vlc.exe" "--reset-config --reset-plugins-cache --save-config vlc:quit"
     "$INSTDIR\vlc.exe" "--reset-config --reset-plugins-cache --save-config vlc:quit"
   CreateShortCut "$SMPROGRAMS\VideoLAN\Documentation.lnk" \
   CreateShortCut "$SMPROGRAMS\VideoLAN\Documentation.lnk" \
     "$INSTDIR\Documentation.url"
     "$INSTDIR\Documentation.url"
   CreateShortCut "$SMPROGRAMS\VideoLAN\Release Notes.lnk" \
   CreateShortCut "$SMPROGRAMS\VideoLAN\Release Notes.lnk" \
     "$INSTDIR\NEWS.txt" ""
     "$INSTDIR\NEWS.txt" ""
   CreateShortCut "$SMPROGRAMS\VideoLAN\${PRODUCT_GROUP} Website.lnk" \
   CreateShortCut "$SMPROGRAMS\VideoLAN\${PRODUCT_GROUP} Website.lnk" \
     "$INSTDIR\${PRODUCT_GROUP} Website.url"
     "$INSTDIR\${PRODUCT_GROUP} Website.url"
   CreateShortCut "$SMPROGRAMS\VideoLAN\VLC media player.lnk" \
   CreateShortCut "$SMPROGRAMS\VideoLAN\VLC media player.lnk" \
     "$INSTDIR\vlc.exe" ""
     "$INSTDIR\vlc.exe" ""
SectionEnd
SectionEnd


Section "Desktop Shortcut" SEC02b
Section "Desktop Shortcut" SEC02b
   SectionIn 1 2 3
   SectionIn 1 2 3
   CreateShortCut "$DESKTOP\VLC media player.lnk" \
   CreateShortCut "$DESKTOP\VLC media player.lnk" \
     "$INSTDIR\vlc.exe" ""
     "$INSTDIR\vlc.exe" ""
SectionEnd
SectionEnd


Section /o "Mozilla plugin" SEC03
Section /o "Mozilla plugin" SEC03
   SectionIn 3
   SectionIn 3


   SetOutPath "$INSTDIR"
   SetOutPath "$INSTDIR"
   !insertmacro OpenUninstallLog
   !insertmacro OpenUninstallLog
   !insertmacro InstallFile mozilla\npvlc.dll
   !insertmacro InstallFile mozilla\npvlc.dll
   !insertmacro CloseUninstallLog
   !insertmacro CloseUninstallLog


   !define Moz "SOFTWARE\MozillaPlugins\@videolan.org/vlc,version=${VERSION}"
   !define Moz "SOFTWARE\MozillaPlugins\@videolan.org/vlc,version=${VERSION}"
   WriteRegStr HKLM ${Moz} "Description" "VLC Multimedia Plugin"
   WriteRegStr HKLM ${Moz} "Description" "VLC Multimedia Plugin"
   WriteRegStr HKLM ${Moz} "Path" "$INSTDIR\npvlc.dll"
   WriteRegStr HKLM ${Moz} "Path" "$INSTDIR\npvlc.dll"
   WriteRegStr HKLM ${Moz} "Product" "VLC media player"
   WriteRegStr HKLM ${Moz} "Product" "VLC media player"
   WriteRegStr HKLM ${Moz} "Vendor" "VideoLAN"
   WriteRegStr HKLM ${Moz} "Vendor" "VideoLAN"
   WriteRegStr HKLM ${Moz} "Version" "${VERSION}"
   WriteRegStr HKLM ${Moz} "Version" "${VERSION}"


  ; for very old version of mozilla, these lines may be needed  
  ; for very old version of mozilla, these lines may be needed  
  ;Push $R0
  ;Push $R0
  ;Push $R1
  ;Push $R1
  ;Push $R2
  ;Push $R2


  ;!define Index 'Line${__LINE__}'
  ;!define Index 'Line${__LINE__}'
  ;StrCpy $R1 "0"
  ;StrCpy $R1 "0"


  ;"${Index}-Loop:"
  ;"${Index}-Loop:"


  ;  ; Check for Key
  ;  ; Check for Key
  ;  EnumRegKey $R0 HKLM "SOFTWARE\Mozilla" "$R1"
  ;  EnumRegKey $R0 HKLM "SOFTWARE\Mozilla" "$R1"
  ;  StrCmp $R0 "" "${Index}-End"
  ;  StrCmp $R0 "" "${Index}-End"
  ;  IntOp $R1 $R1 + 1
  ;  IntOp $R1 $R1 + 1
  ;  ReadRegStr $R2 HKLM "SOFTWARE\Mozilla\$R0\Extensions" "Plugins"
  ;  ReadRegStr $R2 HKLM "SOFTWARE\Mozilla\$R0\Extensions" "Plugins"
  ;  StrCmp $R2 "" "${Index}-Loop" ""
  ;  StrCmp $R2 "" "${Index}-Loop" ""


  ;  CopyFiles "$INSTDIR\npvlc.dll" "$R2"
  ;  CopyFiles "$INSTDIR\npvlc.dll" "$R2"
  ;  !ifdef LIBVLC_DLL
  ;  !ifdef LIBVLC_DLL
  ;  CopyFiles ${LIBVLC_DLL} "$R2"
  ;  CopyFiles ${LIBVLC_DLL} "$R2"
  ;  !endif
  ;  !endif
  ;  Goto "${Index}-Loop"
  ;  Goto "${Index}-Loop"


  ;"${Index}-End:"
  ;"${Index}-End:"
  ;!undef Index
  ;!undef Index


SectionEnd
SectionEnd


Section "ActiveX plugin" SEC04
Section "ActiveX plugin" SEC04
   SectionIn 1 3
   SectionIn 1 3
   SetOutPath "$INSTDIR"
   SetOutPath "$INSTDIR"
   !insertmacro OpenUninstallLog
   !insertmacro OpenUninstallLog
   !insertmacro InstallFile activex\axvlc.dll
   !insertmacro InstallFile activex\axvlc.dll
   !insertmacro CloseUninstallLog
   !insertmacro CloseUninstallLog
   RegDLL "$INSTDIR\axvlc.dll"
   RegDLL "$INSTDIR\axvlc.dll"
SectionEnd
SectionEnd


Section /o "Context Menus" SEC05
Section /o "Context Menus" SEC05
   SectionIn 3
   SectionIn 3
   !insertmacro MacroAllExtensions AddContextMenu
   !insertmacro MacroAllExtensions AddContextMenu
   !insertmacro AddContextMenu "Directory"
   !insertmacro AddContextMenu "Directory"
SectionEnd
SectionEnd


SectionGroup "File type associations" SEC06
SectionGroup "File type associations" SEC06
   SectionGroup "Audio Files"
   SectionGroup "Audio Files"
     !insertmacro MacroAudioExtensions RegisterExtensionSection
     !insertmacro MacroAudioExtensions RegisterExtensionSection
   SectionGroupEnd
   SectionGroupEnd
   SectionGroup "Video Files"
   SectionGroup "Video Files"
     !insertmacro MacroVideoExtensions RegisterExtensionSection
     !insertmacro MacroVideoExtensions RegisterExtensionSection
   SectionGroupEnd
   SectionGroupEnd
   SectionGroup "Other"
   SectionGroup "Other"
     !insertmacro MacroOtherExtensions RegisterExtensionSection
     !insertmacro MacroOtherExtensions RegisterExtensionSection
   SectionGroupEnd
   SectionGroupEnd
SectionGroupEnd
SectionGroupEnd


Section /o "Delete preferences and cache" SEC07
Section /o "Delete preferences and cache" SEC07
   !insertmacro delprefs
   !insertmacro delprefs
SectionEnd
SectionEnd


; Installer section descriptions
; Installer section descriptions
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} \
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} \
     "The media player itself"
     "The media player itself"
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC02a} \
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC02a} \
     "Adds icons to your start menu for easy access"
     "Adds icons to your start menu for easy access"
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC02b} \
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC02b} \
     "Adds icon to your desktop for easy access"
     "Adds icon to your desktop for easy access"
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC03} \
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC03} \
     "The VLC Mozilla and Mozilla Firefox plugin"
     "The VLC Mozilla and Mozilla Firefox plugin"
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC04} \
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC04} \
     "The VLC ActiveX plugin"
     "The VLC ActiveX plugin"
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC05} \
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC05} \
     "Add context menu items ('Play With VLC' and 'Add To VLC's Playlist')"
     "Add context menu items ('Play With VLC' and 'Add To VLC's Playlist')"
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC06} \
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC06} \
     "Sets VLC media player as the default application for the specified file type"
     "Sets VLC media player as the default application for the specified file type"
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC07} \
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC07} \
     "Deletes VLC media player preferences and cache files leftover from previous installations"
     "Deletes VLC media player preferences and cache files leftover from previous installations"
!insertmacro MUI_FUNCTION_DESCRIPTION_END
!insertmacro MUI_FUNCTION_DESCRIPTION_END


Function .onInit
Function .onInit
   ReadRegStr $R0  ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
   ReadRegStr $R0  ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
   "UninstallString"
   "UninstallString"
   StrCmp $R0 "" done
   StrCmp $R0 "" done
   
   
   MessageBox MB_YESNO|MB_ICONEXCLAMATION \
   MessageBox MB_YESNO|MB_ICONEXCLAMATION \
   "VLC media player has already been installed. $\nDo you want to remove \
   "VLC media player has already been installed. $\nDo you want to remove \
   the previous version before installing $(^Name) ?" \
   the previous version before installing $(^Name) ?" \
   IDNO done
   IDNO done
    
    
   ;Run the uninstaller
   ;Run the uninstaller
   ;uninst:
   ;uninst:
     ClearErrors
     ClearErrors
     ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file
     ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file
   done:
   done:
   !insertmacro MUI_LANGDLL_DISPLAY
   !insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd
FunctionEnd


Section -Post
Section -Post
   WriteUninstaller "$INSTDIR\uninstall.exe"
   WriteUninstaller "$INSTDIR\uninstall.exe"
   WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "InstallDir" $INSTDIR
   WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "InstallDir" $INSTDIR
   WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "Version" "${VERSION}"
   WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "Version" "${VERSION}"
   WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\vlc.exe"
   WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\vlc.exe"


   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
     "DisplayName" "$(^Name)"
     "DisplayName" "$(^Name)"
   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
     "UninstallString" "$INSTDIR\uninstall.exe"
     "UninstallString" "$INSTDIR\uninstall.exe"
   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
     "DisplayIcon" "$INSTDIR\vlc.exe"
     "DisplayIcon" "$INSTDIR\vlc.exe"
   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
     "DisplayVersion" "${PRODUCT_VERSION}"
     "DisplayVersion" "${PRODUCT_VERSION}"
   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
     "URLInfoAbout" "${PRODUCT_WEB_SITE}"
     "URLInfoAbout" "${PRODUCT_WEB_SITE}"
   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
     "Publisher" "${PRODUCT_PUBLISHER}"
     "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd
SectionEnd


;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;
; Uninstaller sections ;
; Uninstaller sections ;
;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;


; TrimNewlines (copied from NSIS documentation)
; TrimNewlines (copied from NSIS documentation)
; input, top of stack  (e.g. whatever$\r$\n)
; input, top of stack  (e.g. whatever$\r$\n)
; output, top of stack (replaces, with e.g. whatever)
; output, top of stack (replaces, with e.g. whatever)
; modifies no other variables.
; modifies no other variables.


Function un.TrimNewlines
Function un.TrimNewlines
  Exch $R0
  Exch $R0
  Push $R1
  Push $R1
  Push $R2
  Push $R2
  StrCpy $R1 0
  StrCpy $R1 0
   
   
  loop:
  loop:
   IntOp $R1 $R1 - 1
   IntOp $R1 $R1 - 1
   StrCpy $R2 $R0 1 $R1
   StrCpy $R2 $R0 1 $R1
   StrCmp $R2 "$\r" loop
   StrCmp $R2 "$\r" loop
   StrCmp $R2 "$\n" loop
   StrCmp $R2 "$\n" loop
   IntOp $R1 $R1 + 1
   IntOp $R1 $R1 + 1
   IntCmp $R1 0 no_trim_needed
   IntCmp $R1 0 no_trim_needed
   StrCpy $R0 $R0 $R1
   StrCpy $R0 $R0 $R1
   
   
  no_trim_needed:
  no_trim_needed:
   Pop $R2
   Pop $R2
   Pop $R1
   Pop $R1
   Exch $R0
   Exch $R0
FunctionEnd
FunctionEnd


Function un.RemoveEmptyDirs
Function un.RemoveEmptyDirs
   Pop $9
   Pop $9
   !define Index 'Line${__LINE__}'
   !define Index 'Line${__LINE__}'
   FindFirst $0 $1 "$INSTDIR$9*"
   FindFirst $0 $1 "$INSTDIR$9*"
   StrCmp $0 "" "${Index}-End"
   StrCmp $0 "" "${Index}-End"
   "${Index}-Loop:"
   "${Index}-Loop:"
     StrCmp $1 "" "${Index}-End"
     StrCmp $1 "" "${Index}-End"
     StrCmp $1 "." "${Index}-Next"
     StrCmp $1 "." "${Index}-Next"
     StrCmp $1 ".." "${Index}-Next"
     StrCmp $1 ".." "${Index}-Next"
       Push $0
       Push $0
       Push $1
       Push $1
       Push $9
       Push $9
       Push "$9$1\"
       Push "$9$1\"
       Call un.RemoveEmptyDirs
       Call un.RemoveEmptyDirs
       Pop $9
       Pop $9
       Pop $1
       Pop $1
       Pop $0
       Pop $0
     "${Index}-Remove:"
     "${Index}-Remove:"
     RMDir "$INSTDIR$9$1"
     RMDir "$INSTDIR$9$1"
     "${Index}-Next:"
     "${Index}-Next:"
     FindNext $0 $1
     FindNext $0 $1
     Goto "${Index}-Loop"
     Goto "${Index}-Loop"
   "${Index}-End:"
   "${Index}-End:"
   FindClose $0
   FindClose $0
   !undef Index
   !undef Index
FunctionEnd
FunctionEnd


Section "Uninstall" SEC91
Section "Uninstall" SEC91
   SectionIn 1 2 3 RO
   SectionIn 1 2 3 RO
   SetShellVarContext all
   SetShellVarContext all


   !insertmacro MacroAllExtensions DeleteContextMenu
   !insertmacro MacroAllExtensions DeleteContextMenu
   !insertmacro MacroAllExtensions UnRegisterExtensionSection
   !insertmacro MacroAllExtensions UnRegisterExtensionSection
   !insertmacro DeleteContextMenu "Directory"
   !insertmacro DeleteContextMenu "Directory"


   ;remove activex plugin
   ;remove activex plugin
   UnRegDLL "$INSTDIR\axvlc.dll"
   UnRegDLL "$INSTDIR\axvlc.dll"
   Delete /REBOOTOK "$INSTDIR\axvlc.dll"
   Delete /REBOOTOK "$INSTDIR\axvlc.dll"


   ;remove mozilla plugin
   ;remove mozilla plugin
   Push $R0
   Push $R0
   Push $R1
   Push $R1
   Push $R2
   Push $R2


   !define Index 'Line${__LINE__}'
   !define Index 'Line${__LINE__}'
   StrCpy $R1 "0"
   StrCpy $R1 "0"


   "${Index}-Loop:"
   "${Index}-Loop:"


     ; Check for Key
     ; Check for Key
     EnumRegKey $R0 HKLM "SOFTWARE\Mozilla" "$R1"
     EnumRegKey $R0 HKLM "SOFTWARE\Mozilla" "$R1"
     StrCmp $R0 "" "${Index}-End"
     StrCmp $R0 "" "${Index}-End"
     IntOp $R1 $R1 + 1
     IntOp $R1 $R1 + 1
     ReadRegStr $R2 HKLM "SOFTWARE\Mozilla\$R0\Extensions" "Plugins"
     ReadRegStr $R2 HKLM "SOFTWARE\Mozilla\$R0\Extensions" "Plugins"
     StrCmp $R2 "" "${Index}-Loop" ""
     StrCmp $R2 "" "${Index}-Loop" ""


     ; old files (0.8.5 and before) that may be lying around
     ; old files (0.8.5 and before) that may be lying around
     Delete /REBOOTOK "$R2\npvlc.dll"
     Delete /REBOOTOK "$R2\npvlc.dll"
     Delete /REBOOTOK "$R2\libvlc.dll"
     Delete /REBOOTOK "$R2\libvlc.dll"
     Delete /REBOOTOK "$R2\vlcintf.xpt"
     Delete /REBOOTOK "$R2\vlcintf.xpt"
     Goto "${Index}-Loop"
     Goto "${Index}-Loop"


   "${Index}-End:"
   "${Index}-End:"
   !undef Index
   !undef Index
   Delete /REBOOTOK "$INSTDIR\npvlc.dll"
   Delete /REBOOTOK "$INSTDIR\npvlc.dll"


   RMDir "$SMPROGRAMS\VideoLAN"
   RMDir "$SMPROGRAMS\VideoLAN"
   RMDir /r $SMPROGRAMS\VideoLAN
   RMDir /r $SMPROGRAMS\VideoLAN


   FileOpen $UninstallLog "$INSTDIR\uninstall.log" r
   FileOpen $UninstallLog "$INSTDIR\uninstall.log" r
   UninstallLoop:
   UninstallLoop:
     ClearErrors
     ClearErrors
     FileRead $UninstallLog $R0
     FileRead $UninstallLog $R0
     IfErrors UninstallEnd
     IfErrors UninstallEnd
     Push $R0
     Push $R0
     Call un.TrimNewLines
     Call un.TrimNewLines
     Pop $R0
     Pop $R0
     Delete "$INSTDIR\$R0"
     Delete "$INSTDIR\$R0"
     Goto UninstallLoop
     Goto UninstallLoop
   UninstallEnd:
   UninstallEnd:
   FileClose $UninstallLog
   FileClose $UninstallLog
   Delete "$INSTDIR\uninstall.log"
   Delete "$INSTDIR\uninstall.log"
   Delete "$INSTDIR\uninstall.exe"
   Delete "$INSTDIR\uninstall.exe"
   Push "\"
   Push "\"
   Call un.RemoveEmptyDirs
   Call un.RemoveEmptyDirs
   RMDir "$INSTDIR"
   RMDir "$INSTDIR"


   DeleteRegKey HKLM Software\VideoLAN
   DeleteRegKey HKLM Software\VideoLAN


   DeleteRegKey HKCR Applications\vlc.exe
   DeleteRegKey HKCR Applications\vlc.exe
   DeleteRegKey HKCR AudioCD\shell\PlayWithVLC
   DeleteRegKey HKCR AudioCD\shell\PlayWithVLC
   DeleteRegKey HKCR DVD\shell\PlayWithVLC
   DeleteRegKey HKCR DVD\shell\PlayWithVLC
   DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayDVDMovieOnArrival" "VLCPlayDVDMovieOnArrival"
   DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayDVDMovieOnArrival" "VLCPlayDVDMovieOnArrival"
   DeleteRegKey HKLM Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival
   DeleteRegKey HKLM Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival
   DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayCDAudioOnArrival" "VLCPlayCDAudioOnArrival"
   DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayCDAudioOnArrival" "VLCPlayCDAudioOnArrival"
   DeleteRegKey HKLM Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival
   DeleteRegKey HKLM Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival
   DeleteRegKey HKCR "VLC.MediaFile"
   DeleteRegKey HKCR "VLC.MediaFile"


   DeleteRegKey HKLM \
   DeleteRegKey HKLM \
     "SOFTWARE\MozillaPlugins\@videolan.org/vlc,version=${VERSION}"
     "SOFTWARE\MozillaPlugins\@videolan.org/vlc,version=${VERSION}"


   DeleteRegKey HKLM \
   DeleteRegKey HKLM \
     "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
     "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"


   Delete "$DESKTOP\VLC media player.lnk"
   Delete "$DESKTOP\VLC media player.lnk"


   DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
   DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
   DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
   DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
   SetAutoClose true
   SetAutoClose true
SectionEnd
SectionEnd


Section /o "un.Delete preferences and cache" SEC92
Section /o "un.Delete preferences and cache" SEC92
   !insertmacro delprefs
   !insertmacro delprefs
SectionEnd
SectionEnd


; Uninstaller section descriptions
; Uninstaller section descriptions
!insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC91} \
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC91} \
     "Uninstall VLC media player and all its components"
     "Uninstall VLC media player and all its components"
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC92} \
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC92} \
     "Deletes VLC media player preferences and cache files"
     "Deletes VLC media player preferences and cache files"
!insertmacro MUI_UNFUNCTION_DESCRIPTION_END
!insertmacro MUI_UNFUNCTION_DESCRIPTION_END


;Function un.onUninstSuccess
;Function un.onUninstSuccess
;  HideWindow
;  HideWindow
;  MessageBox MB_ICONINFORMATION|MB_OK \
;  MessageBox MB_ICONINFORMATION|MB_OK \
;    "$(^Name) was successfully removed from your computer."
;    "$(^Name) was successfully removed from your computer."
;FunctionEnd
;FunctionEnd


Function un.onInit
Function un.onInit
   !insertmacro MUI_LANGDLL_DISPLAY
 
   !insertmacro MUI_UNGETLANGUAGE
 
FunctionEnd
FunctionEnd
</highlight-nsis>
</highlight-nsis>


[[Category:Real World Installers]]
[[Category:Real World Installers]]

Revision as of 14:42, 18 September 2007

Description

VLC media player is a free software media player by the VideoLAN project.

The Script

http://trac.videolan.org/vlc/browser/trunk/vlc.win32.nsi.in

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
; NSIS installer script for vlc ;
 
; (http://nsis.sourceforge.net) ;
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 
 
!define PRODUCT_NAME "VLC media player"
 
!define PRODUCT_VERSION '${VERSION}'
 
!define PRODUCT_GROUP "VideoLAN"
 
!define PRODUCT_PUBLISHER "VideoLAN Team"
 
!define PRODUCT_WEB_SITE "http://www.videolan.org"
 
!define PRODUCT_DIR_REGKEY "Software\VideoLAN\VLC"
 
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
 
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
 
!define PRODUCT_ID "{ea92ef52-afe4-4212-bacb-dfe9fca94cd6}"
 
 
 
!define MUI_LANGDLL_REGISTRY_ROOT "HKLM"
 
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_DIR_REGKEY}"
 
!define MUI_LANGDLL_REGISTRY_VALUENAME "Language"
 
 
 
@FILE_LIBVLC_DLL@
 
 
 
;;;;;;;;;;;;;;;;;;;;;;;;;
 
; General configuration ;
 
;;;;;;;;;;;;;;;;;;;;;;;;;
 
 
 
Name "${PRODUCT_GROUP} ${PRODUCT_NAME} ${PRODUCT_VERSION}"
 
OutFile ..\vlc-${VERSION}-win32.exe
 
InstallDir "$PROGRAMFILES\VideoLAN\VLC"
 
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
 
!ifdef NSIS_LZMA_COMPRESS_WHOLE
 
SetCompressor lzma
 
!else
 
SetCompressor /SOLID lzma
 
!endif
 
;ShowInstDetails show
 
;ShowUnInstDetails show
 
SetOverwrite ifnewer
 
CRCCheck on
 
 
 
InstType "Recommended"
 
InstType "Minimum"
 
InstType "Full"
 
 
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
; NSIS Modern User Interface configuration ;
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 
 
; MUI 1.67 compatible ------
 
  !include "MUI.nsh"
 
 
 
; MUI Settings
 
  !define MUI_ABORTWARNING
 
  !define MUI_ICON "vlc48x48.ico"
 
  !define MUI_UNICON "vlc48x48.ico"
 
  !define MUI_COMPONENTSPAGE_SMALLDESC
 
 
 
; Installer pages
 
  ; Welcome page
 
    !define MUI_WELCOMEPAGE_TITLE_3LINES
 
    !insertmacro MUI_PAGE_WELCOME
 
  ; License page
 
    !insertmacro MUI_PAGE_LICENSE "COPYING.txt"
 
  ; Components page
 
    !insertmacro MUI_PAGE_COMPONENTS
 
  ; Directory page
 
    !insertmacro MUI_PAGE_DIRECTORY
 
  ; Instfiles page
 
    !insertmacro MUI_PAGE_INSTFILES
 
  ; Finish page
 
    !define MUI_FINISHPAGE_RUN "$INSTDIR\vlc.exe"
 
    !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\README.txt"
 
    !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
 
    !define MUI_FINISHPAGE_LINK "Visit the VideoLAN VLC media player Website"
 
    !define MUI_FINISHPAGE_LINK_LOCATION "http://www.videolan.org/vlc/"
 
    !define MUI_FINISHPAGE_NOREBOOTSUPPORT
 
    !insertmacro MUI_PAGE_FINISH
 
 
 
; Uninstaller pages
 
    !insertmacro MUI_UNPAGE_CONFIRM
 
    !insertmacro MUI_UNPAGE_COMPONENTS
 
    !insertmacro MUI_UNPAGE_INSTFILES
 
    !insertmacro MUI_UNPAGE_FINISH
 
 
 
; Language files
 
  !insertmacro MUI_LANGUAGE "English" # first language is the default language
 
  !insertmacro MUI_LANGUAGE "French"
 
  !insertmacro MUI_LANGUAGE "German"
 
  !insertmacro MUI_LANGUAGE "Spanish"
 
  !insertmacro MUI_LANGUAGE "SimpChinese"
 
  !insertmacro MUI_LANGUAGE "TradChinese"
 
  !insertmacro MUI_LANGUAGE "Japanese"
 
  !insertmacro MUI_LANGUAGE "Korean"
 
  !insertmacro MUI_LANGUAGE "Italian"
 
  !insertmacro MUI_LANGUAGE "Dutch"
 
  !insertmacro MUI_LANGUAGE "Danish"
 
  !insertmacro MUI_LANGUAGE "Swedish"
 
  !insertmacro MUI_LANGUAGE "Norwegian"
 
  !insertmacro MUI_LANGUAGE "Finnish"
 
  !insertmacro MUI_LANGUAGE "Greek"
 
  !insertmacro MUI_LANGUAGE "Russian"
 
  !insertmacro MUI_LANGUAGE "Portuguese"
 
  !insertmacro MUI_LANGUAGE "Arabic"
 
  !insertmacro MUI_LANGUAGE "Polish"
 
 
 
!insertmacro MUI_RESERVEFILE_LANGDLL
 
 
 
; Reserve files
 
  !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
 
 
 
; MUI end ------
 
 
 
;;;;;;;;;;;;;;;;;;;
 
; Extension lists ;
 
;;;;;;;;;;;;;;;;;;;
 
 
 
!macro MacroAudioExtensions _action
 
  !insertmacro ${_action} ".a52"
 
  !insertmacro ${_action} ".aac"
 
  !insertmacro ${_action} ".ac3"
 
  !insertmacro ${_action} ".dts"
 
  !insertmacro ${_action} ".flac"
 
  !insertmacro ${_action} ".mka"
 
  !insertmacro ${_action} ".mp1"
 
  !insertmacro ${_action} ".mp2"
 
  !insertmacro ${_action} ".mp3"
 
  !insertmacro ${_action} ".ogg"
 
  !insertmacro ${_action} ".spx"
 
  !insertmacro ${_action} ".wav"
 
  !insertmacro ${_action} ".wma"
 
!macroend
 
 
 
!macro MacroVideoExtensions _action
 
  !insertmacro ${_action} ".asf"
 
  !insertmacro ${_action} ".avi"
 
  !insertmacro ${_action} ".divx"
 
  !insertmacro ${_action} ".dv"
 
  !insertmacro ${_action} ".m1v"
 
  !insertmacro ${_action} ".m2v"
 
  !insertmacro ${_action} ".mkv"
 
  !insertmacro ${_action} ".mov"
 
  !insertmacro ${_action} ".mp4"
 
  !insertmacro ${_action} ".mpeg"
 
  !insertmacro ${_action} ".mpeg1"
 
  !insertmacro ${_action} ".mpeg2"
 
  !insertmacro ${_action} ".mpeg4"
 
  !insertmacro ${_action} ".mpg"
 
  !insertmacro ${_action} ".ps"
 
  !insertmacro ${_action} ".ts"
 
  !insertmacro ${_action} ".ogm"
 
  !insertmacro ${_action} ".vob"
 
  !insertmacro ${_action} ".wmv"
 
!macroend
 
 
 
!macro MacroOtherExtensions _action
 
  !insertmacro ${_action} ".asx"
 
  !insertmacro ${_action} ".bin"
 
  !insertmacro ${_action} ".cue"
 
  !insertmacro ${_action} ".m3u"
 
  !insertmacro ${_action} ".pls"
 
  !insertmacro ${_action} ".vlc"
 
!macroend
 
 
 
!macro MacroAllExtensions _action
 
  !insertmacro MacroAudioExtensions ${_action}
 
  !insertmacro MacroVideoExtensions ${_action}
 
  !insertmacro MacroOtherExtensions ${_action}
 
!macroend
 
 
 
;;;;;;;;;;;;;;;;;;;;;;;;;;
 
; File type associations ;
 
;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 
 
Function RegisterExtension
 
  ; back up old value for extension $R0 (eg. ".opt")
 
  ReadRegStr $1 HKCR "$R0" ""
 
  StrCmp $1 "" NoBackup
 
    StrCmp $1 "VLC$R0" "NoBackup"
 
    WriteRegStr HKCR "$R0" "VLC.backup" $1
 
NoBackup:
 
  WriteRegStr HKCR "$R0" "" "VLC$R0"
 
  ReadRegStr $0 HKCR "VLC$R0" ""
 
  WriteRegStr HKCR "VLC$R0" "" "VLC media file ($R0)"
 
  WriteRegStr HKCR "VLC$R0\shell" "" "Play"
 
  WriteRegStr HKCR "VLC$R0\shell\Play\command" "" '"$INSTDIR\vlc.exe" --started-from-file "%1"'
 
  WriteRegStr HKCR "VLC$R0\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'
 
FunctionEnd
 
 
 
Function un.RegisterExtension
 
  ;start of restore script
 
  ReadRegStr $1 HKCR "$R0" ""
 
  StrCmp $1 "VLC$R0" 0 NoOwn ; only do this if we own it
 
    ReadRegStr $1 HKCR "$R0" "VLC.backup"
 
    StrCmp $1 "" 0 Restore ; if backup="" then delete the whole key
 
      DeleteRegKey HKCR "$R0"
 
    Goto NoOwn
 
Restore:
 
      WriteRegStr HKCR "$R0" "" $1
 
      DeleteRegValue HKCR "$R0" "VLC.backup"
 
NoOwn:
 
    DeleteRegKey HKCR "VLC$R0" ;Delete key with association settings
 
FunctionEnd
 
 
 
!macro RegisterExtensionSection EXT
 
  Section ${EXT}
 
    SectionIn 1 3
 
    Push $R0
 
    StrCpy $R0 ${EXT}
 
    Call RegisterExtension
 
    Pop $R0
 
  SectionEnd
 
!macroend
 
 
 
!macro UnRegisterExtensionSection EXT
 
  Push $R0
 
  StrCpy $R0 ${EXT}
 
  Call un.RegisterExtension
 
  Pop $R0
 
!macroend
 
 
 
!macro WriteRegStrSupportedTypes EXT
 
  WriteRegStr HKCR Applications\vlc.exe\SupportedTypes ${EXT} ""
 
!macroend
 
 
 
;;;;;;;;;;;;;;;;;;;;;;;;
 
; Context menu entries ;
 
;;;;;;;;;;;;;;;;;;;;;;;;
 
 
 
!macro AddContextMenu EXT
 
  WriteRegStr HKCR ${EXT}\shell\PlayWithVLC "" "Play with VLC media player"
 
  WriteRegStr HKCR ${EXT}\shell\PlayWithVLC\command "" '$INSTDIR\vlc.exe --started-from-file --no-playlist-enqueue "%1"'
 
 
 
  WriteRegStr HKCR ${EXT}\shell\AddToPlaylistVLC "" "Add to VLC media player's Playlist"
 
  WriteRegStr HKCR ${EXT}\shell\AddToPlaylistVLC\command "" '$INSTDIR\vlc.exe --started-from-file --playlist-enqueue "%1"'
 
!macroend
 
 
 
!macro DeleteContextMenu EXT
 
  DeleteRegKey HKCR ${EXT}\shell\PlayWithVLC
 
  DeleteRegKey HKCR ${EXT}\shell\AddToPlaylistVLC
 
!macroend
 
 
 
;;;;;;;;;;;;;;;;;;;;;;;;;;
 
; Delete prefs and cache ;
 
;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 
 
!macro delprefs
 
  StrCpy $0 0
 
  !define Index 'Line${__LINE__}'
 
  "${Index}-Loop:"
 
  ; FIXME
 
  ; this will loop through all the logged users and "virtual" windows users
 
  ; (it looks like users are only present in HKEY_USERS when they are logged in)
 
    ClearErrors
 
    EnumRegKey $1 HKU "" $0
 
    StrCmp $1 "" "${Index}-End"
 
    IntOp $0 $0 + 1
 
    ReadRegStr $2 HKU "$1\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" AppData
 
    StrCmp $2 "" "${Index}-Loop"
 
    RMDir /r "$2\vlc"
 
    Goto "${Index}-Loop"
 
  "${Index}-End:"
 
  !undef Index
 
!macroend
 
 
 
Var UninstallLog
 
 
 
!macro OpenUninstallLog
 
  FileOpen $UninstallLog "$INSTDIR\uninstall.log" a
 
  FileSeek $UninstallLog 0 END
 
!macroend
 
 
 
!macro CloseUninstallLog
 
  FileClose $UninstallLog
 
  SetFileAttributes "$INSTDIR\uninstall.log" HIDDEN
 
!macroend
 
 
 
!macro InstallFile FILEREGEX
 
  File "${FILEREGEX}"
 
  !define Index 'Line${__LINE__}'
 
  FindFirst $0 $1 "$INSTDIR\${FILEREGEX}"
 
  StrCmp $0 "" "${Index}-End"
 
  "${Index}-Loop:"
 
    StrCmp $1 "" "${Index}-End"
 
    FileWrite $UninstallLog "$1$\r$\n"
 
    FindNext $0 $1
 
    Goto "${Index}-Loop"
 
  "${Index}-End:"
 
  !undef Index
 
!macroend
 
 
 
!macro InstallFolder FOLDER
 
  File /r "${FOLDER}"
 
  Push "${FOLDER}"
 
  Call InstallFolderInternal
 
!macroend
 
 
 
Function InstallFolderInternal
 
  Pop $9
 
  !define Index 'Line${__LINE__}'
 
  FindFirst $0 $1 "$INSTDIR\$9\*"
 
  StrCmp $0 "" "${Index}-End"
 
  "${Index}-Loop:"
 
    StrCmp $1 "" "${Index}-End"
 
    StrCmp $1 "." "${Index}-Next"
 
    StrCmp $1 ".." "${Index}-Next"
 
    IfFileExists "$9\$1\*" 0 "${Index}-Write"
 
      Push $0
 
      Push $9
 
      Push "$9\$1"
 
      Call InstallFolderInternal
 
      Pop $9
 
      Pop $0
 
      Goto "${Index}-Next"
 
    "${Index}-Write:"
 
    FileWrite $UninstallLog "$9\$1$\r$\n"
 
    "${Index}-Next:"
 
    FindNext $0 $1
 
    Goto "${Index}-Loop"
 
  "${Index}-End:"
 
  !undef Index
 
FunctionEnd
 
 
 
 
 
;;;;;;;;;;;;;;;;;;;;;;
 
; Installer sections ;
 
;;;;;;;;;;;;;;;;;;;;;;
 
 
 
Section "Media player (required)" SEC01
 
  SectionIn 1 2 3 RO
 
  SetShellVarContext all
 
  SetOutPath "$INSTDIR"
 
 
 
  !insertmacro OpenUninstallLog
 
 
 
  !insertmacro InstallFile vlc.exe
 
  !insertmacro InstallFile vlc.exe.manifest
 
  !ifdef LIBVLC_DLL
 
  !insertmacro InstallFile ${LIBVLC_DLL}
 
  !endif
 
  !insertmacro InstallFile *.txt
 
 
 
  !insertmacro InstallFolder plugins
 
  !insertmacro InstallFolder locale
 
  !insertmacro InstallFolder osdmenu
 
  !insertmacro InstallFolder skins
 
  !insertmacro InstallFolder http
 
 
 
  WriteIniStr "$INSTDIR\${PRODUCT_GROUP} Website.url" "InternetShortcut" "URL" \
 
    "${PRODUCT_WEB_SITE}"
 
  FileWrite $UninstallLog "${PRODUCT_GROUP} Website.url$\r$\n"
 
  WriteIniStr "$INSTDIR\Documentation.url" "InternetShortcut" "URL" \
 
    "${PRODUCT_WEB_SITE}/doc/"
 
  FileWrite $UninstallLog "Documentation.url$\r$\n"
 
 
 
  !insertmacro CloseUninstallLog
 
 
 
  ; Add VLC to "recomended programs" for the following extensions
 
  WriteRegStr HKCR Applications\vlc.exe "" ""
 
  WriteRegStr HKCR Applications\vlc.exe "FriendlyAppName" "VLC media player"
 
  WriteRegStr HKCR Applications\vlc.exe\shell\Play "" "Play with VLC"
 
  WriteRegStr HKCR Applications\vlc.exe\shell\Play\command "" \
 
    '$INSTDIR\vlc.exe --started-from-file "%1"'
 
  !insertmacro MacroAllExtensions WriteRegStrSupportedTypes
 
 
 
  WriteRegStr HKCR "AudioCD\shell\PlayWithVLC" "" "Play with VLC media player"
 
  WriteRegStr HKCR "AudioCD\shell\PlayWithVLC\command" "" \
 
    "$INSTDIR\vlc.exe --started-from-file cdda:%1"
 
  WriteRegStr HKCR "DVD\shell\PlayWithVLC" "" "Play with VLC media player"
 
  WriteRegStr HKCR "DVD\shell\PlayWithVLC\command" "" \
 
    "$INSTDIR\vlc.exe --started-from-file dvd:%1"
 
 
 
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayDVDMovieOnArrival" "VLCPlayDVDMovieOnArrival" ""
 
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "Action" "Play DVD movie"
 
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "DefaultIcon" '"$INSTDIR\vlc.exe",0'
 
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "InvokeProgID" "VLC.DVDMovie"
 
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "InvokeVerb" "play"
 
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "Provider" "VideoLAN VLC media player"
 
 
 
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayCDAudioOnArrival" "VLCPlayCDAudioOnArrival" ""
 
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "Action" "Play CD audio"
 
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "DefaultIcon" '"$INSTDIR\vlc.exe --started-from-file",0'
 
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "InvokeProgID" "VLC.CDAudio"
 
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "InvokeVerb" "play"
 
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "Provider" "VideoLAN VLC media player"
 
  WriteRegStr HKCR "VLC.DVDMovie" "" "VLC DVD Movie"
 
  WriteRegStr HKCR "VLC.DVDMovie\shell" "" "Play"
 
  WriteRegStr HKCR "VLC.DVDMovie\shell\Play\command" "" \
 
    '$INSTDIR\vlc.exe --started-from-file dvd:%1'
 
  WriteRegStr HKCR "VLC.DVDMovie\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'
 
  WriteRegStr HKCR "VLC.CDAudio" "" "VLC CD Audio"
 
  WriteRegStr HKCR "VLC.CDAudio\shell" "" "Play"
 
  WriteRegStr HKCR "VLC.CDAudio\shell\Play\command" "" \
 
    '$INSTDIR\vlc.exe --started-from-file cdda:%1'
 
  WriteRegStr HKCR "VLC.CDAudio\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'
 
 
 
SectionEnd
 
 
 
Section "Start Menu Shortcut" SEC02a
 
  SectionIn 1 2 3
 
  CreateDirectory "$SMPROGRAMS\VideoLAN"
 
  CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings"
 
  CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Audio"
 
  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Audio\Set Audio mode to DirectX (default).lnk" \
 
    "$INSTDIR\vlc.exe" "--aout aout_directx --save-config vlc:quit"
 
  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Audio\Set Audio mode to Waveout.lnk" \
 
    "$INSTDIR\vlc.exe" "--aout waveout --save-config vlc:quit"
 
  CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Interface"
 
  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Interface\Set Main Interface to Skinnable.lnk" \
 
    "$INSTDIR\vlc.exe" "-I skins --save-config vlc:quit"
 
  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Interface\Set Main Interface to wxWidgets (default).lnk" \
 
    "$INSTDIR\vlc.exe" "-I wxwin --save-config vlc:quit"
 
  CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Video"
 
  ; FIXME add detection for Vista. Direct3D will be default there, for all others it's DirectX
 
  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to Direct3D.lnk" \
 
    "$INSTDIR\vlc.exe" "--vout direct3d --overlay --directx-hw-yuv --save-config vlc:quit"
 
  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to Direct3D (no hardware acceleration).lnk" \
 
    "$INSTDIR\vlc.exe" "--vout direct3d --overlay --no-directx-hw-yuv --save-config vlc:quit"
 
  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX.lnk" \
 
    "$INSTDIR\vlc.exe" "--vout directx --overlay --directx-hw-yuv --save-config vlc:quit"
 
  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX (no hardware acceleration).lnk" \
 
    "$INSTDIR\vlc.exe" "--vout directx --no-overlay --no-directx-hw-yuv --save-config vlc:quit"
 
  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX (no video overlay).lnk" \
 
    "$INSTDIR\vlc.exe" "--vout directx --no-overlay --directx-hw-yuv --save-config vlc:quit"
 
  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to OpenGL.lnk" \
 
    "$INSTDIR\vlc.exe" "--vout opengl --overlay --save-config vlc:quit"
 
  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Reset VLC media player preferences and cache files.lnk" \
 
    "$INSTDIR\vlc.exe" "--reset-config --reset-plugins-cache --save-config vlc:quit"
 
  CreateShortCut "$SMPROGRAMS\VideoLAN\Documentation.lnk" \
 
    "$INSTDIR\Documentation.url"
 
  CreateShortCut "$SMPROGRAMS\VideoLAN\Release Notes.lnk" \
 
    "$INSTDIR\NEWS.txt" ""
 
  CreateShortCut "$SMPROGRAMS\VideoLAN\${PRODUCT_GROUP} Website.lnk" \
 
    "$INSTDIR\${PRODUCT_GROUP} Website.url"
 
  CreateShortCut "$SMPROGRAMS\VideoLAN\VLC media player.lnk" \
 
    "$INSTDIR\vlc.exe" ""
 
SectionEnd
 
 
 
Section "Desktop Shortcut" SEC02b
 
  SectionIn 1 2 3
 
  CreateShortCut "$DESKTOP\VLC media player.lnk" \
 
    "$INSTDIR\vlc.exe" ""
 
SectionEnd
 
 
 
Section /o "Mozilla plugin" SEC03
 
  SectionIn 3
 
 
 
  SetOutPath "$INSTDIR"
 
  !insertmacro OpenUninstallLog
 
  !insertmacro InstallFile mozilla\npvlc.dll
 
  !insertmacro CloseUninstallLog
 
 
 
  !define Moz "SOFTWARE\MozillaPlugins\@videolan.org/vlc,version=${VERSION}"
 
  WriteRegStr HKLM ${Moz} "Description" "VLC Multimedia Plugin"
 
  WriteRegStr HKLM ${Moz} "Path" "$INSTDIR\npvlc.dll"
 
  WriteRegStr HKLM ${Moz} "Product" "VLC media player"
 
  WriteRegStr HKLM ${Moz} "Vendor" "VideoLAN"
 
  WriteRegStr HKLM ${Moz} "Version" "${VERSION}"
 
 
 
 ; for very old version of mozilla, these lines may be needed 
 
 ;Push $R0
 
 ;Push $R1
 
 ;Push $R2
 
 
 
 ;!define Index 'Line${__LINE__}'
 
 ;StrCpy $R1 "0"
 
 
 
 ;"${Index}-Loop:"
 
 
 
 ;  ; Check for Key
 
 ;  EnumRegKey $R0 HKLM "SOFTWARE\Mozilla" "$R1"
 
 ;  StrCmp $R0 "" "${Index}-End"
 
 ;  IntOp $R1 $R1 + 1
 
 ;  ReadRegStr $R2 HKLM "SOFTWARE\Mozilla\$R0\Extensions" "Plugins"
 
 ;  StrCmp $R2 "" "${Index}-Loop" ""
 
 
 
 ;  CopyFiles "$INSTDIR\npvlc.dll" "$R2"
 
 ;  !ifdef LIBVLC_DLL
 
 ;  CopyFiles ${LIBVLC_DLL} "$R2"
 
 ;  !endif
 
 ;  Goto "${Index}-Loop"
 
 
 
 ;"${Index}-End:"
 
 ;!undef Index
 
 
 
SectionEnd
 
 
 
Section "ActiveX plugin" SEC04
 
  SectionIn 1 3
 
  SetOutPath "$INSTDIR"
 
  !insertmacro OpenUninstallLog
 
  !insertmacro InstallFile activex\axvlc.dll
 
  !insertmacro CloseUninstallLog
 
  RegDLL "$INSTDIR\axvlc.dll"
 
SectionEnd
 
 
 
Section /o "Context Menus" SEC05
 
  SectionIn 3
 
  !insertmacro MacroAllExtensions AddContextMenu
 
  !insertmacro AddContextMenu "Directory"
 
SectionEnd
 
 
 
SectionGroup "File type associations" SEC06
 
  SectionGroup "Audio Files"
 
    !insertmacro MacroAudioExtensions RegisterExtensionSection
 
  SectionGroupEnd
 
  SectionGroup "Video Files"
 
    !insertmacro MacroVideoExtensions RegisterExtensionSection
 
  SectionGroupEnd
 
  SectionGroup "Other"
 
    !insertmacro MacroOtherExtensions RegisterExtensionSection
 
  SectionGroupEnd
 
SectionGroupEnd
 
 
 
Section /o "Delete preferences and cache" SEC07
 
  !insertmacro delprefs
 
SectionEnd
 
 
 
; Installer section descriptions
 
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
 
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} \
 
    "The media player itself"
 
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC02a} \
 
    "Adds icons to your start menu for easy access"
 
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC02b} \
 
    "Adds icon to your desktop for easy access"
 
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC03} \
 
    "The VLC Mozilla and Mozilla Firefox plugin"
 
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC04} \
 
    "The VLC ActiveX plugin"
 
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC05} \
 
    "Add context menu items ('Play With VLC' and 'Add To VLC's Playlist')"
 
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC06} \
 
    "Sets VLC media player as the default application for the specified file type"
 
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC07} \
 
    "Deletes VLC media player preferences and cache files leftover from previous installations"
 
!insertmacro MUI_FUNCTION_DESCRIPTION_END
 
 
 
Function .onInit
 
  ReadRegStr $R0  ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
 
  "UninstallString"
 
  StrCmp $R0 "" done
 
 
 
  MessageBox MB_YESNO|MB_ICONEXCLAMATION \
 
  "VLC media player has already been installed. $\nDo you want to remove \
 
  the previous version before installing $(^Name) ?" \
 
  IDNO done
 
 
 
  ;Run the uninstaller
 
  ;uninst:
 
    ClearErrors
 
    ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file
 
  done:
 
  !insertmacro MUI_LANGDLL_DISPLAY
 
FunctionEnd
 
 
 
Section -Post
 
  WriteUninstaller "$INSTDIR\uninstall.exe"
 
  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "InstallDir" $INSTDIR
 
  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "Version" "${VERSION}"
 
  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\vlc.exe"
 
 
 
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
 
    "DisplayName" "$(^Name)"
 
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
 
    "UninstallString" "$INSTDIR\uninstall.exe"
 
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
 
    "DisplayIcon" "$INSTDIR\vlc.exe"
 
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
 
    "DisplayVersion" "${PRODUCT_VERSION}"
 
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
 
    "URLInfoAbout" "${PRODUCT_WEB_SITE}"
 
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
 
    "Publisher" "${PRODUCT_PUBLISHER}"
 
SectionEnd
 
 
 
;;;;;;;;;;;;;;;;;;;;;;;;
 
; Uninstaller sections ;
 
;;;;;;;;;;;;;;;;;;;;;;;;
 
 
 
; TrimNewlines (copied from NSIS documentation)
 
; input, top of stack  (e.g. whatever$\r$\n)
 
; output, top of stack (replaces, with e.g. whatever)
 
; modifies no other variables.
 
 
 
Function un.TrimNewlines
 
 Exch $R0
 
 Push $R1
 
 Push $R2
 
 StrCpy $R1 0
 
 
 
 loop:
 
   IntOp $R1 $R1 - 1
 
   StrCpy $R2 $R0 1 $R1
 
   StrCmp $R2 "$\r" loop
 
   StrCmp $R2 "$\n" loop
 
   IntOp $R1 $R1 + 1
 
   IntCmp $R1 0 no_trim_needed
 
   StrCpy $R0 $R0 $R1
 
 
 
 no_trim_needed:
 
   Pop $R2
 
   Pop $R1
 
   Exch $R0
 
FunctionEnd
 
 
 
Function un.RemoveEmptyDirs
 
  Pop $9
 
  !define Index 'Line${__LINE__}'
 
  FindFirst $0 $1 "$INSTDIR$9*"
 
  StrCmp $0 "" "${Index}-End"
 
  "${Index}-Loop:"
 
    StrCmp $1 "" "${Index}-End"
 
    StrCmp $1 "." "${Index}-Next"
 
    StrCmp $1 ".." "${Index}-Next"
 
      Push $0
 
      Push $1
 
      Push $9
 
      Push "$9$1\"
 
      Call un.RemoveEmptyDirs
 
      Pop $9
 
      Pop $1
 
      Pop $0
 
    "${Index}-Remove:"
 
    RMDir "$INSTDIR$9$1"
 
    "${Index}-Next:"
 
    FindNext $0 $1
 
    Goto "${Index}-Loop"
 
  "${Index}-End:"
 
  FindClose $0
 
  !undef Index
 
FunctionEnd
 
 
 
Section "Uninstall" SEC91
 
  SectionIn 1 2 3 RO
 
  SetShellVarContext all
 
 
 
  !insertmacro MacroAllExtensions DeleteContextMenu
 
  !insertmacro MacroAllExtensions UnRegisterExtensionSection
 
  !insertmacro DeleteContextMenu "Directory"
 
 
 
  ;remove activex plugin
 
  UnRegDLL "$INSTDIR\axvlc.dll"
 
  Delete /REBOOTOK "$INSTDIR\axvlc.dll"
 
 
 
  ;remove mozilla plugin
 
  Push $R0
 
  Push $R1
 
  Push $R2
 
 
 
  !define Index 'Line${__LINE__}'
 
  StrCpy $R1 "0"
 
 
 
  "${Index}-Loop:"
 
 
 
    ; Check for Key
 
    EnumRegKey $R0 HKLM "SOFTWARE\Mozilla" "$R1"
 
    StrCmp $R0 "" "${Index}-End"
 
    IntOp $R1 $R1 + 1
 
    ReadRegStr $R2 HKLM "SOFTWARE\Mozilla\$R0\Extensions" "Plugins"
 
    StrCmp $R2 "" "${Index}-Loop" ""
 
 
 
    ; old files (0.8.5 and before) that may be lying around
 
    Delete /REBOOTOK "$R2\npvlc.dll"
 
    Delete /REBOOTOK "$R2\libvlc.dll"
 
    Delete /REBOOTOK "$R2\vlcintf.xpt"
 
    Goto "${Index}-Loop"
 
 
 
  "${Index}-End:"
 
  !undef Index
 
  Delete /REBOOTOK "$INSTDIR\npvlc.dll"
 
 
 
  RMDir "$SMPROGRAMS\VideoLAN"
 
  RMDir /r $SMPROGRAMS\VideoLAN
 
 
 
  FileOpen $UninstallLog "$INSTDIR\uninstall.log" r
 
  UninstallLoop:
 
    ClearErrors
 
    FileRead $UninstallLog $R0
 
    IfErrors UninstallEnd
 
    Push $R0
 
    Call un.TrimNewLines
 
    Pop $R0
 
    Delete "$INSTDIR\$R0"
 
    Goto UninstallLoop
 
  UninstallEnd:
 
  FileClose $UninstallLog
 
  Delete "$INSTDIR\uninstall.log"
 
  Delete "$INSTDIR\uninstall.exe"
 
  Push "\"
 
  Call un.RemoveEmptyDirs
 
  RMDir "$INSTDIR"
 
 
 
  DeleteRegKey HKLM Software\VideoLAN
 
 
 
  DeleteRegKey HKCR Applications\vlc.exe
 
  DeleteRegKey HKCR AudioCD\shell\PlayWithVLC
 
  DeleteRegKey HKCR DVD\shell\PlayWithVLC
 
  DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayDVDMovieOnArrival" "VLCPlayDVDMovieOnArrival"
 
  DeleteRegKey HKLM Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival
 
  DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayCDAudioOnArrival" "VLCPlayCDAudioOnArrival"
 
  DeleteRegKey HKLM Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival
 
  DeleteRegKey HKCR "VLC.MediaFile"
 
 
 
  DeleteRegKey HKLM \
 
    "SOFTWARE\MozillaPlugins\@videolan.org/vlc,version=${VERSION}"
 
 
 
  DeleteRegKey HKLM \
 
    "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
 
 
 
  Delete "$DESKTOP\VLC media player.lnk"
 
 
 
  DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
 
  DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
 
  SetAutoClose true
 
SectionEnd
 
 
 
Section /o "un.Delete preferences and cache" SEC92
 
  !insertmacro delprefs
 
SectionEnd
 
 
 
; Uninstaller section descriptions
 
!insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN
 
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC91} \
 
    "Uninstall VLC media player and all its components"
 
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC92} \
 
    "Deletes VLC media player preferences and cache files"
 
!insertmacro MUI_UNFUNCTION_DESCRIPTION_END
 
 
 
;Function un.onUninstSuccess
 
;  HideWindow
 
;  MessageBox MB_ICONINFORMATION|MB_OK \
 
;    "$(^Name) was successfully removed from your computer."
 
;FunctionEnd
 
 
 
Function un.onInit
 
  !insertmacro MUI_UNGETLANGUAGE
 
FunctionEnd