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