]> git.sesse.net Git - vlc/blob - extras/package/win32/vlc.win32.nsi.in
91d3d693f6d9cd8698a5980d4ff903463ffebf7d
[vlc] / extras / package / win32 / vlc.win32.nsi.in
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ; NSIS installer script for vlc ;
3 ; (http://nsis.sourceforge.net) ;
4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5
6 !define PRODUCT_NAME "VLC media player"
7 !define VERSION @VERSION@
8 !define PRODUCT_VERSION @VERSION@
9 !define PRODUCT_GROUP "VideoLAN"
10 !define PRODUCT_PUBLISHER "VideoLAN Team"
11 !define PRODUCT_WEB_SITE "http://www.videolan.org"
12 !define PRODUCT_DIR_REGKEY "Software\VideoLAN\VLC"
13 !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
14 !define PRODUCT_UNINST_ROOT_KEY "HKLM"
15 !define PRODUCT_ID "{ea92ef52-afe4-4212-bacb-dfe9fca94cd6}"
16
17 !define MUI_LANGDLL_REGISTRY_ROOT "HKLM"
18 !define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_DIR_REGKEY}"
19 !define MUI_LANGDLL_REGISTRY_VALUENAME "Language"
20
21 @FILE_LIBVLCCORE_DLL@
22 @FILE_LIBVLC_DLL@
23
24 ;;;;;;;;;;;;;;;;;;;;;;;;;
25 ; General configuration ;
26 ;;;;;;;;;;;;;;;;;;;;;;;;;
27
28 Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
29 OutFile ..\vlc-${VERSION}-win32.exe
30 InstallDir "$PROGRAMFILES\VideoLAN\VLC"
31 InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
32 !ifdef NSIS_LZMA_COMPRESS_WHOLE
33 SetCompressor lzma
34 !else
35 SetCompressor /SOLID lzma
36 !endif
37
38 ;ShowInstDetails show
39 ;ShowUnInstDetails show
40 SetOverwrite ifnewer
41 CRCCheck on
42 BrandingText "${PRODUCT_GROUP} ${PRODUCT_NAME}"
43
44 InstType "Recommended"
45 InstType "Minimum"
46 InstType "Full"
47
48 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
49 ; NSIS Modern User Interface configuration ;
50 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
51
52 ; MUI 1.67 compatible ------
53   !include "MUI.nsh"
54
55 ; MUI Settings
56   !define MUI_ABORTWARNING
57   !define MUI_ICON "vlc48x48.ico"
58   !define MUI_UNICON "vlc48x48.ico"
59   !define MUI_COMPONENTSPAGE_SMALLDESC
60
61 ; Installer pages
62   ; Welcome page
63     !define MUI_WELCOMEPAGE_TITLE_3LINES
64     !insertmacro MUI_PAGE_WELCOME
65   ; License page
66     !insertmacro MUI_PAGE_LICENSE "COPYING.txt"
67   ; Components page
68     !insertmacro MUI_PAGE_COMPONENTS
69   ; Directory page
70     !insertmacro MUI_PAGE_DIRECTORY
71   ; Instfiles page
72     !insertmacro MUI_PAGE_INSTFILES
73   ; Finish page
74     !define MUI_FINISHPAGE_RUN "$INSTDIR\vlc.exe"
75     !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\README.txt"
76     !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
77     !define MUI_FINISHPAGE_LINK "Visit the VideoLAN VLC media player Website"
78     !define MUI_FINISHPAGE_LINK_LOCATION "http://www.videolan.org/vlc/"
79     !define MUI_FINISHPAGE_NOREBOOTSUPPORT
80     !insertmacro MUI_PAGE_FINISH
81
82 ; Uninstaller pages
83     !insertmacro MUI_UNPAGE_CONFIRM
84     !insertmacro MUI_UNPAGE_COMPONENTS
85     !insertmacro MUI_UNPAGE_INSTFILES
86     !insertmacro MUI_UNPAGE_FINISH
87
88 ; Language files
89   !insertmacro MUI_LANGUAGE "English" # first language is the default language
90   !insertmacro MUI_LANGUAGE "French"
91   !insertmacro MUI_LANGUAGE "German"
92   !insertmacro MUI_LANGUAGE "Spanish"
93   !insertmacro MUI_LANGUAGE "SimpChinese"
94   !insertmacro MUI_LANGUAGE "TradChinese"
95   !insertmacro MUI_LANGUAGE "Japanese"
96   !insertmacro MUI_LANGUAGE "Korean"
97   !insertmacro MUI_LANGUAGE "Italian"
98   !insertmacro MUI_LANGUAGE "Dutch"
99   !insertmacro MUI_LANGUAGE "Danish"
100   !insertmacro MUI_LANGUAGE "Swedish"
101   !insertmacro MUI_LANGUAGE "Norwegian"
102   !insertmacro MUI_LANGUAGE "Finnish"
103   !insertmacro MUI_LANGUAGE "Greek"
104   !insertmacro MUI_LANGUAGE "Russian"
105   !insertmacro MUI_LANGUAGE "Portuguese"
106   !insertmacro MUI_LANGUAGE "Arabic"
107   !insertmacro MUI_LANGUAGE "Polish"
108   !insertmacro MUI_LANGUAGE "Romanian"
109   !insertmacro MUI_LANGUAGE "Slovak"
110   !insertmacro MUI_LANGUAGE "Czech"
111
112 ; Reserve files for solid compression
113   !insertmacro MUI_RESERVEFILE_LANGDLL
114   !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
115
116 ; MUI end ------
117
118 ;;;;;;;;;;;;;;;;;;;;;;;
119 ; Macro and Functions ;
120 ;;;;;;;;;;;;;;;;;;;;;;;
121
122 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
123 ; 1. File type associations ;
124 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
125
126 ;; Function that register one extension for VLC
127 Function RegisterExtension
128   ; back up old value for extension $R0 (eg. ".opt")
129   ReadRegStr $1 HKCR "$R0" ""
130   StrCmp $1 "" NoBackup
131     StrCmp $1 "VLC$R0" "NoBackup"
132     WriteRegStr HKCR "$R0" "VLC.backup" $1
133 NoBackup:
134   WriteRegStr HKCR "$R0" "" "VLC$R0"
135   ReadRegStr $0 HKCR "VLC$R0" ""
136   WriteRegStr HKCR "VLC$R0" "" "VLC media file ($R0)"
137   WriteRegStr HKCR "VLC$R0\shell" "" "Play"
138   WriteRegStr HKCR "VLC$R0\shell\Play\command" "" '"$INSTDIR\vlc.exe" --started-from-file "%1"'
139   WriteRegStr HKCR "VLC$R0\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'
140
141 ;;; Vista Only part
142   ; Vista detection
143   ReadRegStr $R1 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
144   StrCpy $R2 $R1 3
145   StrCmp $R2 '6.0' ForVista ToEnd
146 ForVista:
147   WriteRegStr HKLM "Software\Clients\Media\VLC\Capabilities\FileAssociations" "$R0" "VLC$R0"
148
149 ToEnd:
150 FunctionEnd
151
152 ;; Function that removes one extension that VLC owns.
153 Function un.RegisterExtension
154   ;start of restore script
155   ReadRegStr $1 HKCR "$R0" ""
156   StrCmp $1 "VLC$R0" 0 NoOwn ; only do this if we own it
157     ; Read the old value from Backup
158     ReadRegStr $1 HKCR "$R0" "VLC.backup"
159     StrCmp $1 "" 0 Restore ; if backup="" then delete the whole key
160       DeleteRegKey HKCR "$R0"
161     Goto NoOwn
162 Restore:
163       WriteRegStr HKCR "$R0" "" $1
164       DeleteRegValue HKCR "$R0" "VLC.backup"
165 NoOwn:
166     DeleteRegKey HKCR "VLC$R0" ;Delete key with association settings
167     DeleteRegKey HKLM "Software\Clients\Media\VLC\Capabilities\FileAssociations\VLC$R0" ; for vista
168 FunctionEnd
169
170 !macro RegisterExtensionSection EXT
171   Section ${EXT}
172     SectionIn 1 3
173     Push $R0
174     StrCpy $R0 ${EXT}
175     Call RegisterExtension
176     Pop $R0
177   SectionEnd
178 !macroend
179
180 !macro UnRegisterExtensionSection EXT
181   Push $R0
182   StrCpy $R0 ${EXT}
183   Call un.RegisterExtension
184   Pop $R0
185 !macroend
186
187 !macro WriteRegStrSupportedTypes EXT
188   WriteRegStr HKCR Applications\vlc.exe\SupportedTypes ${EXT} ""
189 !macroend
190
191 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
192 ; Extension lists  Macros                    ;
193 ; Those macros calls the previous functions  ;
194 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
195
196 !macro MacroAudioExtensions _action
197   !insertmacro ${_action} ".a52"
198   !insertmacro ${_action} ".aac"
199   !insertmacro ${_action} ".ac3"
200   !insertmacro ${_action} ".dts"
201   !insertmacro ${_action} ".flac"
202   !insertmacro ${_action} ".mka"
203   !insertmacro ${_action} ".mp1"
204   !insertmacro ${_action} ".mp2"
205   !insertmacro ${_action} ".mp3"
206   !insertmacro ${_action} ".ogg"
207   !insertmacro ${_action} ".spx"
208   !insertmacro ${_action} ".wav"
209   !insertmacro ${_action} ".wma"
210 !macroend
211
212 !macro MacroVideoExtensions _action
213   !insertmacro ${_action} ".asf"
214   !insertmacro ${_action} ".avi"
215   !insertmacro ${_action} ".divx"
216   !insertmacro ${_action} ".dv"
217   !insertmacro ${_action} ".m1v"
218   !insertmacro ${_action} ".m2v"
219   !insertmacro ${_action} ".mkv"
220   !insertmacro ${_action} ".mov"
221   !insertmacro ${_action} ".mp4"
222   !insertmacro ${_action} ".mpeg"
223   !insertmacro ${_action} ".mpeg1"
224   !insertmacro ${_action} ".mpeg2"
225   !insertmacro ${_action} ".mpeg4"
226   !insertmacro ${_action} ".mpg"
227   !insertmacro ${_action} ".mxf"
228   !insertmacro ${_action} ".ps"
229   !insertmacro ${_action} ".ts"
230   !insertmacro ${_action} ".ogm"
231   !insertmacro ${_action} ".vob"
232   !insertmacro ${_action} ".wmv"
233 !macroend
234
235 !macro MacroOtherExtensions _action
236   !insertmacro ${_action} ".asx"
237   !insertmacro ${_action} ".bin"
238   !insertmacro ${_action} ".cue"
239   !insertmacro ${_action} ".m3u"
240   !insertmacro ${_action} ".pls"
241   !insertmacro ${_action} ".vlc"
242 !macroend
243
244 ; One macro to rule them all
245 !macro MacroAllExtensions _action
246   !insertmacro MacroAudioExtensions ${_action}
247   !insertmacro MacroVideoExtensions ${_action}
248   !insertmacro MacroOtherExtensions ${_action}
249 !macroend
250
251 ;;;;;;;;;;;;;;;;;;;;;;;;;;;
252 ; 2. Context menu entries ;
253 ;;;;;;;;;;;;;;;;;;;;;;;;;;;
254
255 ; Generic function for adding the context menu for one ext.
256 !macro AddContextMenuExt EXT
257   WriteRegStr HKCR ${EXT}\shell\PlayWithVLC "" "Play with VLC media player"
258   WriteRegStr HKCR ${EXT}\shell\PlayWithVLC\command "" '$INSTDIR\vlc.exe --started-from-file --no-playlist-enqueue "%1"'
259
260   WriteRegStr HKCR ${EXT}\shell\AddToPlaylistVLC "" "Add to VLC media player's Playlist"
261   WriteRegStr HKCR ${EXT}\shell\AddToPlaylistVLC\command "" '$INSTDIR\vlc.exe --started-from-file --playlist-enqueue "%1"'
262 !macroend
263
264 !macro AddContextMenu EXT
265   Push $R0
266   ReadRegStr $R0 HKCR ${EXT} ""
267   !insertmacro AddContextMenuExt $R0
268   Pop $R0
269 !macroend
270
271 !macro DeleteContextMenuExt EXT
272   DeleteRegKey HKCR ${EXT}\shell\PlayWithVLC
273   DeleteRegKey HKCR ${EXT}\shell\AddToPlaylistVLC
274 !macroend
275
276 !macro DeleteContextMenu EXT
277   Push $R0
278   ReadRegStr $R0 HKCR ${EXT} ""
279   !insertmacro DeleteContextMenuExt $R0
280   Pop $R0
281 !macroend
282
283 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
284 ; 3. Delete prefs and cache ;
285 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
286
287 !macro delprefs
288   StrCpy $0 0
289   !define Index 'Line${__LINE__}'
290   "${Index}-Loop:"
291   ; FIXME
292   ; this will loop through all the logged users and "virtual" windows users
293   ; (it looks like users are only present in HKEY_USERS when they are logged in)
294     ClearErrors
295     EnumRegKey $1 HKU "" $0
296     StrCmp $1 "" "${Index}-End"
297     IntOp $0 $0 + 1
298     ReadRegStr $2 HKU "$1\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" AppData
299     StrCmp $2 "" "${Index}-Loop"
300     RMDir /r "$2\vlc"
301     Goto "${Index}-Loop"
302   "${Index}-End:"
303   !undef Index
304 !macroend
305
306 ;;;;;;;;;;;;;;;
307 ; 4. Logging  ;
308 ;;;;;;;;;;;;;;;
309 Var UninstallLog
310 !macro OpenUninstallLog
311   FileOpen $UninstallLog "$INSTDIR\uninstall.log" a
312   FileSeek $UninstallLog 0 END
313 !macroend
314
315 !macro CloseUninstallLog
316   FileClose $UninstallLog
317   SetFileAttributes "$INSTDIR\uninstall.log" HIDDEN
318 !macroend
319
320 ;;;;;;;;;;;;;;;;;;;;
321 ; 5. Installations ;
322 ;;;;;;;;;;;;;;;;;;;;
323 !macro InstallFile FILEREGEX
324   File "${FILEREGEX}"
325   !define Index 'Line${__LINE__}'
326   FindFirst $0 $1 "$INSTDIR\${FILEREGEX}"
327   StrCmp $0 "" "${Index}-End"
328   "${Index}-Loop:"
329     StrCmp $1 "" "${Index}-End"
330     FileWrite $UninstallLog "$1$\r$\n"
331     FindNext $0 $1
332     Goto "${Index}-Loop"
333   "${Index}-End:"
334   !undef Index
335 !macroend
336
337 !macro InstallFolder FOLDER
338   File /r "${FOLDER}"
339   Push "${FOLDER}"
340   Call InstallFolderInternal
341 !macroend
342
343 Function InstallFolderInternal
344   Pop $9
345   !define Index 'Line${__LINE__}'
346   FindFirst $0 $1 "$INSTDIR\$9\*"
347   StrCmp $0 "" "${Index}-End"
348   "${Index}-Loop:"
349     StrCmp $1 "" "${Index}-End"
350     StrCmp $1 "." "${Index}-Next"
351     StrCmp $1 ".." "${Index}-Next"
352     IfFileExists "$9\$1\*" 0 "${Index}-Write"
353       Push $0
354       Push $9
355       Push "$9\$1"
356       Call InstallFolderInternal
357       Pop $9
358       Pop $0
359       Goto "${Index}-Next"
360     "${Index}-Write:"
361     FileWrite $UninstallLog "$9\$1$\r$\n"
362     "${Index}-Next:"
363     FindNext $0 $1
364     Goto "${Index}-Loop"
365   "${Index}-End:"
366   !undef Index
367 FunctionEnd
368 ;;; End of Macros
369
370
371 ;;;;;;;;;;;;;;;;;;;;;;
372 ; Installer sections ;
373 ; The CORE of the    ;
374 ; installer          ;
375 ;;;;;;;;;;;;;;;;;;;;;;
376
377 Section "Media player (required)" SEC01
378   SectionIn 1 2 3 RO
379   SetShellVarContext all
380   SetOutPath "$INSTDIR"
381
382   !insertmacro OpenUninstallLog
383
384   ; VLC.exe, libvlc.dll
385   !insertmacro InstallFile vlc.exe
386   !insertmacro InstallFile vlc.exe.manifest
387   !ifdef LIBVLCCORE_DLL
388       !insertmacro InstallFile ${LIBVLCCORE_DLL}
389   !endif
390   !ifdef LIBVLC_DLL
391       !insertmacro InstallFile ${LIBVLC_DLL}
392   !endif
393
394   ; Text files
395   !insertmacro InstallFile *.txt
396
397   ; Subfolders
398   !insertmacro InstallFolder plugins
399   !insertmacro InstallFolder locale
400   !insertmacro InstallFolder osdmenu
401   !insertmacro InstallFolder skins
402   !insertmacro InstallFolder http
403   !insertmacro InstallFolder lua
404
405   ; URLs
406   WriteIniStr "$INSTDIR\${PRODUCT_GROUP} Website.url" "InternetShortcut" "URL" \
407     "${PRODUCT_WEB_SITE}"
408   FileWrite $UninstallLog "${PRODUCT_GROUP} Website.url$\r$\n"
409   WriteIniStr "$INSTDIR\Documentation.url" "InternetShortcut" "URL" \
410     "${PRODUCT_WEB_SITE}/doc/"
411   FileWrite $UninstallLog "Documentation.url$\r$\n"
412   WriteIniStr "$INSTDIR\New_Skins.url" "InternetShortcut" "URL" \
413     "${PRODUCT_WEB_SITE}/vlc/skins.php"
414   FileWrite $UninstallLog "New_Skins.url$\r$\n"
415
416   !insertmacro CloseUninstallLog
417
418   ; Add VLC to "recomended programs" for the following extensions
419   WriteRegStr HKCR Applications\vlc.exe "" ""
420   WriteRegStr HKCR Applications\vlc.exe "FriendlyAppName" "VLC media player"
421   WriteRegStr HKCR Applications\vlc.exe\shell\Play "" "Play with VLC"
422   WriteRegStr HKCR Applications\vlc.exe\shell\Play\command "" \
423     '$INSTDIR\vlc.exe --started-from-file "%1"'
424   !insertmacro MacroAllExtensions WriteRegStrSupportedTypes
425
426 ; Vista Registration
427   ; Vista detection
428   ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
429   StrCpy $R1 $R0 3
430   StrCmp $R1 '6.0' lbl_vista lbl_done
431
432   lbl_vista:
433   WriteRegStr HKLM "Software\RegisteredApplications" "VLC" "Software\Clients\Media\VLC\Capabilities"
434   WriteRegStr HKLM "Software\Clients\Media\VLC\Capabilities" "ApplicationName" "VLC media player"
435   WriteRegStr HKLM "Software\Clients\Media\VLC\Capabilities" "ApplicationDescription" "VLC - The video swiss knife"
436
437   lbl_done:
438 SectionEnd
439
440 Section "Start Menu Shortcut" SEC02a
441   SectionIn 1 2 3
442   CreateDirectory "$SMPROGRAMS\VideoLAN"
443   CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings"
444   CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Audio"
445   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Audio\Set Audio mode to DirectX (default).lnk" \
446     "$INSTDIR\vlc.exe" "--aout aout_directx --save-config vlc://quit"
447   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Audio\Set Audio mode to Waveout.lnk" \
448     "$INSTDIR\vlc.exe" "--aout waveout --save-config vlc://quit"
449   CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Interface"
450   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Interface\Set Main Interface to Skinnable.lnk" \
451     "$INSTDIR\vlc.exe" "-I skins --save-config vlc://quit"
452   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Interface\Set Main Interface to Qt (default).lnk" \
453     "$INSTDIR\vlc.exe" "-I qt --save-config vlc://quit"
454   CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Video"
455   ; FIXME add detection for Vista. Direct3D will be default there, for all others it's DirectX
456   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to Direct3D.lnk" \
457     "$INSTDIR\vlc.exe" "--vout direct3d --overlay --directx-hw-yuv --save-config vlc://quit"
458   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to Direct3D (no hardware acceleration).lnk" \
459     "$INSTDIR\vlc.exe" "--vout direct3d --overlay --no-directx-hw-yuv --save-config vlc://quit"
460   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX.lnk" \
461     "$INSTDIR\vlc.exe" "--vout directx --overlay --directx-hw-yuv --save-config vlc://quit"
462   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX (no hardware acceleration).lnk" \
463     "$INSTDIR\vlc.exe" "--vout directx --no-overlay --no-directx-hw-yuv --save-config vlc://quit"
464   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX (no video overlay).lnk" \
465     "$INSTDIR\vlc.exe" "--vout directx --no-overlay --directx-hw-yuv --save-config vlc://quit"
466   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to OpenGL.lnk" \
467     "$INSTDIR\vlc.exe" "--vout opengl --overlay --save-config vlc://quit"
468   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Reset VLC media player preferences and cache files.lnk" \
469     "$INSTDIR\vlc.exe" "--reset-config --reset-plugins-cache vlc://quit"
470   CreateShortCut "$SMPROGRAMS\VideoLAN\Documentation.lnk" \
471     "$INSTDIR\Documentation.url"
472   CreateShortCut "$SMPROGRAMS\VideoLAN\Release Notes.lnk" \
473     "$INSTDIR\NEWS.txt" ""
474   CreateShortCut "$SMPROGRAMS\VideoLAN\${PRODUCT_GROUP} Website.lnk" \
475     "$INSTDIR\${PRODUCT_GROUP} Website.url"
476   CreateShortCut "$SMPROGRAMS\VideoLAN\VLC media player.lnk" \
477     "$INSTDIR\vlc.exe" ""
478 SectionEnd
479
480 Section "Desktop Shortcut" SEC02b
481   SectionIn 1 2 3
482   CreateShortCut "$DESKTOP\VLC media player.lnk" \
483     "$INSTDIR\vlc.exe" ""
484 SectionEnd
485
486 Section /o "Mozilla plugin" SEC03
487   SectionIn 3
488
489   SetOutPath "$INSTDIR"
490   !insertmacro OpenUninstallLog
491   !insertmacro InstallFile mozilla\npvlc.dll
492   !insertmacro CloseUninstallLog
493
494   !define Moz "SOFTWARE\MozillaPlugins\@videolan.org/vlc,version=${VERSION}"
495   WriteRegStr HKLM ${Moz} "Description" "VLC Multimedia Plugin"
496   WriteRegStr HKLM ${Moz} "Path" "$INSTDIR\npvlc.dll"
497   WriteRegStr HKLM ${Moz} "Product" "VLC media player"
498   WriteRegStr HKLM ${Moz} "Vendor" "VideoLAN"
499   WriteRegStr HKLM ${Moz} "Version" "${VERSION}"
500
501  ; for very old version of mozilla, these lines may be needed
502  ;Push $R0
503  ;Push $R1
504  ;Push $R2
505
506  ;!define Index 'Line${__LINE__}'
507  ;StrCpy $R1 "0"
508
509  ;"${Index}-Loop:"
510
511  ;  ; Check for Key
512  ;  EnumRegKey $R0 HKLM "SOFTWARE\Mozilla" "$R1"
513  ;  StrCmp $R0 "" "${Index}-End"
514  ;  IntOp $R1 $R1 + 1
515  ;  ReadRegStr $R2 HKLM "SOFTWARE\Mozilla\$R0\Extensions" "Plugins"
516  ;  StrCmp $R2 "" "${Index}-Loop" ""
517
518  ;  CopyFiles "$INSTDIR\npvlc.dll" "$R2"
519  ;  !ifdef LIBVLC_DLL
520  ;  CopyFiles ${LIBVLC_DLL} "$R2"
521  ;  !endif
522  ;  !ifdef LIBVLC_CONTROL_DLL
523  ;  CopyFiles ${LIBVLC_CONTROL_DLL} "$R2"
524  ;  !endif
525  ;  Goto "${Index}-Loop"
526
527  ;"${Index}-End:"
528  ;!undef Index
529
530 SectionEnd
531
532 Section "ActiveX plugin" SEC04
533   SectionIn 1 3
534   SetOutPath "$INSTDIR"
535   !insertmacro OpenUninstallLog
536   !insertmacro InstallFile activex\axvlc.dll
537   !insertmacro CloseUninstallLog
538   RegDLL "$INSTDIR\axvlc.dll"
539 SectionEnd
540
541 Section "Discs Playback" SEC05
542   SectionIn 1 2 3
543   WriteRegStr HKCR "AudioCD\shell\PlayWithVLC" "" "Play with VLC media player"
544   WriteRegStr HKCR "AudioCD\shell\PlayWithVLC\command" "" \
545     "$INSTDIR\vlc.exe --started-from-file cdda://%1"
546   WriteRegStr HKCR "DVD\shell\PlayWithVLC" "" "Play with VLC media player"
547   WriteRegStr HKCR "DVD\shell\PlayWithVLC\command" "" \
548     "$INSTDIR\vlc.exe --started-from-file dvd://%1"
549
550   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayDVDMovieOnArrival" "VLCPlayDVDMovieOnArrival" ""
551   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "Action" "Play DVD movie"
552   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "DefaultIcon" '"$INSTDIR\vlc.exe",0'
553   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "InvokeProgID" "VLC.DVDMovie"
554   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "InvokeVerb" "play"
555   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "Provider" "VideoLAN VLC media player"
556
557   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayCDAudioOnArrival" "VLCPlayCDAudioOnArrival" ""
558   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "Action" "Play CD audio"
559   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "DefaultIcon" '"$INSTDIR\vlc.exe",0'
560   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "InvokeProgID" "VLC.CDAudio"
561   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "InvokeVerb" "play"
562   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "Provider" "VideoLAN VLC media player"
563   WriteRegStr HKCR "VLC.DVDMovie" "" "VLC DVD Movie"
564   WriteRegStr HKCR "VLC.DVDMovie\shell" "" "Play"
565   WriteRegStr HKCR "VLC.DVDMovie\shell\Play\command" "" \
566     '$INSTDIR\vlc.exe --started-from-file dvd://%1'
567   WriteRegStr HKCR "VLC.DVDMovie\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'
568   WriteRegStr HKCR "VLC.CDAudio" "" "VLC CD Audio"
569   WriteRegStr HKCR "VLC.CDAudio\shell" "" "Play"
570   WriteRegStr HKCR "VLC.CDAudio\shell\Play\command" "" \
571     '$INSTDIR\vlc.exe --started-from-file cdda://%1'
572   WriteRegStr HKCR "VLC.CDAudio\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'
573
574 SectionEnd
575
576 SectionGroup "File type associations" SEC06
577   SectionGroup "Audio Files"
578     !insertmacro MacroAudioExtensions RegisterExtensionSection
579   SectionGroupEnd
580   SectionGroup "Video Files"
581     !insertmacro MacroVideoExtensions RegisterExtensionSection
582   SectionGroupEnd
583   SectionGroup "Other"
584     !insertmacro MacroOtherExtensions RegisterExtensionSection
585   SectionGroupEnd
586 SectionGroupEnd
587
588 Section "Context Menus" SEC07
589   SectionIn 3
590   !insertmacro MacroAllExtensions AddContextMenu
591   !insertmacro AddContextMenuExt "Directory"
592 SectionEnd
593
594 Section /o "Delete preferences and cache" SEC08
595   !insertmacro delprefs
596 SectionEnd
597
598 ; Installer section descriptions
599 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
600   !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} \
601     "The media player itself"
602   !insertmacro MUI_DESCRIPTION_TEXT ${SEC02a} \
603     "Adds icons to your start menu for easy access"
604   !insertmacro MUI_DESCRIPTION_TEXT ${SEC02b} \
605     "Adds icon to your desktop for easy access"
606   !insertmacro MUI_DESCRIPTION_TEXT ${SEC03} \
607     "The VLC Mozilla and Mozilla Firefox plugin"
608   !insertmacro MUI_DESCRIPTION_TEXT ${SEC04} \
609     "The VLC ActiveX plugin"
610   !insertmacro MUI_DESCRIPTION_TEXT ${SEC05} \
611     "DVD and CD playback registration"
612   !insertmacro MUI_DESCRIPTION_TEXT ${SEC06} \
613     "Sets VLC media player as the default application for the specified file type"
614   !insertmacro MUI_DESCRIPTION_TEXT ${SEC07} \
615     "Add context menu items ('Play With VLC' and 'Add To VLC's Playlist')"
616   !insertmacro MUI_DESCRIPTION_TEXT ${SEC08} \
617     "Deletes VLC media player preferences and cache files leftover from previous installations"
618 !insertmacro MUI_FUNCTION_DESCRIPTION_END
619
620 ;;; Start function
621 Function .onInit
622   ReadRegStr $R0  ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
623   "UninstallString"
624   StrCmp $R0 "" done
625
626   MessageBox MB_YESNO|MB_ICONEXCLAMATION \
627   "VLC media player has already been installed. $\nDo you want to remove \
628   the previous version before installing $(^Name) ?" \
629   IDNO done
630
631   ;Run the uninstaller
632   ;uninst:
633     ClearErrors
634     ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file
635   done:
636   !insertmacro MUI_LANGDLL_DISPLAY
637
638 FunctionEnd
639
640 ;; End function
641 Section -Post
642   WriteUninstaller "$INSTDIR\uninstall.exe"
643   WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "InstallDir" $INSTDIR
644   WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "Version" "${VERSION}"
645   WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\vlc.exe"
646
647   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
648     "DisplayName" "$(^Name)"
649   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
650     "UninstallString" "$INSTDIR\uninstall.exe"
651   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
652     "DisplayIcon" "$INSTDIR\vlc.exe"
653   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
654     "DisplayVersion" "${PRODUCT_VERSION}"
655   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
656     "URLInfoAbout" "${PRODUCT_WEB_SITE}"
657   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
658     "Publisher" "${PRODUCT_PUBLISHER}"
659 SectionEnd
660
661 ;;;;;;;;;;;;;;;;;;;;;;;;
662 ; Uninstaller sections ;
663 ;;;;;;;;;;;;;;;;;;;;;;;;
664
665 ; TrimNewlines (copied from NSIS documentation)
666 ; input, top of stack  (e.g. whatever$\r$\n)
667 ; output, top of stack (replaces, with e.g. whatever)
668 ; modifies no other variables.
669
670 Function un.TrimNewlines
671  Exch $R0
672  Push $R1
673  Push $R2
674  StrCpy $R1 0
675
676  loop:
677    IntOp $R1 $R1 - 1
678    StrCpy $R2 $R0 1 $R1
679    StrCmp $R2 "$\r" loop
680    StrCmp $R2 "$\n" loop
681    IntOp $R1 $R1 + 1
682    IntCmp $R1 0 no_trim_needed
683    StrCpy $R0 $R0 $R1
684
685  no_trim_needed:
686    Pop $R2
687    Pop $R1
688    Exch $R0
689 FunctionEnd
690
691 Function un.RemoveEmptyDirs
692   Pop $9
693   !define Index 'Line${__LINE__}'
694   FindFirst $0 $1 "$INSTDIR$9*"
695   StrCmp $0 "" "${Index}-End"
696   "${Index}-Loop:"
697     StrCmp $1 "" "${Index}-End"
698     StrCmp $1 "." "${Index}-Next"
699     StrCmp $1 ".." "${Index}-Next"
700       Push $0
701       Push $1
702       Push $9
703       Push "$9$1\"
704       Call un.RemoveEmptyDirs
705       Pop $9
706       Pop $1
707       Pop $0
708     "${Index}-Remove:"
709     RMDir "$INSTDIR$9$1"
710     "${Index}-Next:"
711     FindNext $0 $1
712     Goto "${Index}-Loop"
713   "${Index}-End:"
714   FindClose $0
715   !undef Index
716 FunctionEnd
717
718 Section "Uninstall" SEC91
719   SectionIn 1 2 3 RO
720   SetShellVarContext all
721
722   !insertmacro MacroAllExtensions DeleteContextMenu
723   !insertmacro MacroAllExtensions UnRegisterExtensionSection
724   !insertmacro DeleteContextMenuExt "Directory"
725
726   ;remove activex plugin
727   UnRegDLL "$INSTDIR\axvlc.dll"
728   Delete /REBOOTOK "$INSTDIR\axvlc.dll"
729
730   ;remove mozilla plugin
731   Push $R0
732   Push $R1
733   Push $R2
734
735   !define Index 'Line${__LINE__}'
736   StrCpy $R1 "0"
737
738   "${Index}-Loop:"
739
740     ; Check for Key
741     EnumRegKey $R0 HKLM "SOFTWARE\Mozilla" "$R1"
742     StrCmp $R0 "" "${Index}-End"
743     IntOp $R1 $R1 + 1
744     ReadRegStr $R2 HKLM "SOFTWARE\Mozilla\$R0\Extensions" "Plugins"
745     StrCmp $R2 "" "${Index}-Loop" ""
746
747     ; old files (0.8.5 and before) that may be lying around
748     Delete /REBOOTOK "$R2\npvlc.dll"
749     Delete /REBOOTOK "$R2\libvlc.dll"
750     Delete /REBOOTOK "$R2\vlcintf.xpt"
751     Goto "${Index}-Loop"
752
753   "${Index}-End:"
754   !undef Index
755   Delete /REBOOTOK "$INSTDIR\npvlc.dll"
756
757   RMDir "$SMPROGRAMS\VideoLAN"
758   RMDir /r $SMPROGRAMS\VideoLAN
759
760   FileOpen $UninstallLog "$INSTDIR\uninstall.log" r
761   UninstallLoop:
762     ClearErrors
763     FileRead $UninstallLog $R0
764     IfErrors UninstallEnd
765     Push $R0
766     Call un.TrimNewLines
767     Pop $R0
768     Delete "$INSTDIR\$R0"
769     Goto UninstallLoop
770   UninstallEnd:
771   FileClose $UninstallLog
772   Delete "$INSTDIR\uninstall.log"
773   Delete "$INSTDIR\uninstall.exe"
774   Push "\"
775   Call un.RemoveEmptyDirs
776   RMDir "$INSTDIR"
777
778   DeleteRegKey HKLM Software\VideoLAN
779
780   DeleteRegKey HKCR Applications\vlc.exe
781   DeleteRegKey HKCR AudioCD\shell\PlayWithVLC
782   DeleteRegKey HKCR DVD\shell\PlayWithVLC
783   DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayDVDMovieOnArrival" "VLCPlayDVDMovieOnArrival"
784   DeleteRegKey HKLM Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival
785   DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayCDAudioOnArrival" "VLCPlayCDAudioOnArrival"
786   DeleteRegKey HKLM Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival
787   DeleteRegKey HKLM Software\Clients\Media\VLC
788   DeleteRegKey HKCR "VLC.MediaFile"
789
790   DeleteRegKey HKLM \
791     "SOFTWARE\MozillaPlugins\@videolan.org/vlc,version=${VERSION}"
792
793   DeleteRegKey HKLM \
794     "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
795
796   Delete "$DESKTOP\VLC media player.lnk"
797
798   DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
799   DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
800   SetAutoClose true
801 SectionEnd
802
803 Section /o "un.Delete preferences and cache" SEC92
804   !insertmacro delprefs
805 SectionEnd
806
807 ; Uninstaller section descriptions
808 !insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN
809   !insertmacro MUI_DESCRIPTION_TEXT ${SEC91} \
810     "Uninstall VLC media player and all its components"
811   !insertmacro MUI_DESCRIPTION_TEXT ${SEC92} \
812     "Deletes VLC media player preferences and cache files"
813 !insertmacro MUI_UNFUNCTION_DESCRIPTION_END
814
815 ;Function un.onUninstSuccess
816 ;  HideWindow
817 ;  MessageBox MB_ICONINFORMATION|MB_OK \
818 ;    "$(^Name) was successfully removed from your computer."
819 ;FunctionEnd
820
821 Function un.onInit
822   !insertmacro MUI_UNGETLANGUAGE
823 FunctionEnd