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