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