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