]> git.sesse.net Git - vlc/blobdiff - vlc.win32.nsi
Add play with VLC and Add to VLC's playlist context menu items
[vlc] / vlc.win32.nsi
index fa41aaa720bc359e05d61b7979ed1bad057cfe73..31e0f4140539254ce0d1832aa7bab70e4c0dc9d3 100644 (file)
@@ -11,6 +11,7 @@
 !define PRODUCT_DIR_REGKEY "Software\VideoLAN\VLC"\r
 !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"\r
 !define PRODUCT_UNINST_ROOT_KEY "HKLM"\r
+!define PRODUCT_ID "{ea92ef52-afe4-4212-bacb-dfe9fca94cd6}"\r
 \r
 ;;;;;;;;;;;;;;;;;;;;;;;;;\r
 ; General configuration ;\r
@@ -68,6 +69,63 @@ InstType "Full"
 \r
 ; MUI end ------\r
 \r
+\r
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
+; Push extensions on stack ;\r
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
+!macro MacroAudioExtensions _action\r
+  !insertmacro ${_action} ".a52"\r
+  !insertmacro ${_action} ".aac"\r
+  !insertmacro ${_action} ".ac3"\r
+  !insertmacro ${_action} ".dts"\r
+  !insertmacro ${_action} ".flac"\r
+  !insertmacro ${_action} ".mka"\r
+  !insertmacro ${_action} ".mp1"\r
+  !insertmacro ${_action} ".mp2"\r
+  !insertmacro ${_action} ".mp3"\r
+  !insertmacro ${_action} ".ogg"\r
+  !insertmacro ${_action} ".spx"\r
+  !insertmacro ${_action} ".wav"\r
+  !insertmacro ${_action} ".wma"\r
+!macroend\r
+\r
+!macro MacroVideoExtensions _action\r
+  !insertmacro ${_action} ".asf"\r
+  !insertmacro ${_action} ".avi"\r
+  !insertmacro ${_action} ".divx"\r
+  !insertmacro ${_action} ".dv"\r
+  !insertmacro ${_action} ".m1v"\r
+  !insertmacro ${_action} ".m2v"\r
+  !insertmacro ${_action} ".mkv"\r
+  !insertmacro ${_action} ".mov"\r
+  !insertmacro ${_action} ".mp4"\r
+  !insertmacro ${_action} ".mpeg"\r
+  !insertmacro ${_action} ".mpeg1"\r
+  !insertmacro ${_action} ".mpeg2"\r
+  !insertmacro ${_action} ".mpeg4"\r
+  !insertmacro ${_action} ".mpg"\r
+  !insertmacro ${_action} ".ps"\r
+  !insertmacro ${_action} ".ts"\r
+  !insertmacro ${_action} ".ogm"\r
+  !insertmacro ${_action} ".vob"\r
+  !insertmacro ${_action} ".wmv"\r
+!macroend\r
+\r
+!macro MacroOtherExtensions _action\r
+  !insertmacro ${_action} ".asx"\r
+  !insertmacro ${_action} ".bin"\r
+  !insertmacro ${_action} ".cue"\r
+  !insertmacro ${_action} ".m3u"\r
+  !insertmacro ${_action} ".pls"\r
+  !insertmacro ${_action} ".vlc"\r
+!macroend\r
+\r
+!macro MacroAllExtensions _action\r
+  !insertmacro MacroAudioExtensions ${_action}\r
+  !insertmacro MacroVideoExtensions ${_action}\r
+  !insertmacro MacroOtherExtensions ${_action}\r
+!macroend\r
+\r
 ;;;;;;;;;;;;;;;;;;;;;;;;;;\r
 ; File type associations ;\r
 ;;;;;;;;;;;;;;;;;;;;;;;;;;\r
@@ -83,7 +141,7 @@ NoBackup:
   ReadRegStr $0 HKCR "VLC$R0" ""\r
   WriteRegStr HKCR "VLC$R0" "" "VLC media file"\r
   WriteRegStr HKCR "VLC$R0\shell" "" "Play"\r
-  WriteRegStr HKCR "VLC$R0\shell\Play\command" "" '$INSTDIR\vlc.exe "%1"'\r
+  WriteRegStr HKCR "VLC$R0\shell\Play\command" "" '"$INSTDIR\vlc.exe" "%1"'\r
   WriteRegStr HKCR "VLC$R0\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'\r
 FunctionEnd\r
 \r
@@ -118,6 +176,27 @@ FunctionEnd
   Pop $R0\r
 !macroend\r
 \r
+!macro WriteRegStrSupportedTypes EXT\r
+  WriteRegStr HKCR Applications\vlc.exe\SupportedTypes ${EXT} ""\r
+!macroend\r
+\r
+;;;;;;;;;;;;;;;;;;;;;;;;\r
+; Context menu entries ;\r
+;;;;;;;;;;;;;;;;;;;;;;;;\r
+\r
+!macro AddContextMenu EXT\r
+  WriteRegStr HKCR ${EXT}\shell\PlayWithVLC "" "Play with VLC media player"\r
+  WriteRegStr HKCR ${EXT}\shell\PlayWithVLC\command "" '$INSTDIR\vlc.exe "%1"'\r
+\r
+  WriteRegStr HKCR ${EXT}\shell\AddToPlaylistVLC "" "Add to VLC media player's Playlist"\r
+  WriteRegStr HKCR ${EXT}\shell\AddToPlaylistVLC\command "" '$INSTDIR\vlc.exe --one-instance --playlist-enqueue "%1"'\r
+!macroend\r
+\r
+!macro DeleteContextMenu EXT\r
+  DeleteRegKey HKCR ${EXT}\shell\PlayWithVLC\r
+  DeleteRegKey HKCR ${EXT}\shell\AddToPlaylistVLC\r
+!macroend\r
+\r
 ;;;;;;;;;;;;;;;;;;;;;;\r
 ; Installer sections ;\r
 ;;;;;;;;;;;;;;;;;;;;;;\r
@@ -136,10 +215,13 @@ Section "Media player (required)" SEC01
   File  /r skins\r
   File  /r http\r
 \r
+  ; Add VLC to "recomended programs" for the following extensions\r
   WriteRegStr HKCR Applications\vlc.exe "" ""\r
-  WriteRegStr HKCR Applications\vlc.exe\shell "" "Play"\r
+  WriteRegStr HKCR Applications\vlc.exe "FriendlyAppName" "VLC media player"\r
+  WriteRegStr HKCR Applications\vlc.exe\shell\Play "" "Play with VLC"\r
   WriteRegStr HKCR Applications\vlc.exe\shell\Play\command "" \\r
     '$INSTDIR\vlc.exe "%1"'\r
+  !insertmacro MacroAllExtensions WriteRegStrSupportedTypes\r
 \r
   WriteRegStr HKCR "AudioCD\shell\PlayWithVLC" "" "Play with VLC media player"\r
   WriteRegStr HKCR "AudioCD\shell\PlayWithVLC\command" "" \\r
@@ -151,21 +233,26 @@ Section "Media player (required)" SEC01
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayDVDMovieOnArrival" "VLCPlayDVDMovieOnArrival" ""\r
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "Action" "Play DVD movie"\r
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "DefaultIcon" '"$INSTDIR\vlc.exe",0'\r
-  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "Invoke.ProgID" "VLC.MediaFile"\r
+  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "InvokeProgID" "VLC.DVDMovie"\r
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "InvokeVerb" "play"\r
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "Provider" "VideoLAN VLC media player"\r
 \r
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayCDAudioOnArrival" "VLCPlayCDAudioOnArrival" ""\r
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "Action" "Play CD audio"\r
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "DefaultIcon" '"$INSTDIR\vlc.exe",0'\r
-  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "Invoke.ProgID" "VLC.MediaFile"\r
+  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "InvokeProgID" "VLC.CDAudio"\r
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "InvokeVerb" "play"\r
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "Provider" "VideoLAN VLC media player"\r
-  WriteRegStr HKCR "VLC.MediaFile" "" "VLC media file"\r
-  WriteRegStr HKCR "VLC.MediaFile\shell" "" "Play"\r
-  WriteRegStr HKCR "VLC.MediaFile\shell\Play\command" "" \\r
-    '$INSTDIR\vlc.exe "%1"'\r
-  WriteRegStr HKCR "VLC.MediaFile\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'\r
+  WriteRegStr HKCR "VLC.DVDMovie" "" "VLC DVD Movie"\r
+  WriteRegStr HKCR "VLC.DVDMovie\shell" "" "Play"\r
+  WriteRegStr HKCR "VLC.DVDMovie\shell\Play\command" "" \\r
+    '$INSTDIR\vlc.exe dvd:%1@1:0'\r
+  WriteRegStr HKCR "VLC.DVDMovie\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'\r
+  WriteRegStr HKCR "VLC.CDAudio" "" "VLC CD Audio"\r
+  WriteRegStr HKCR "VLC.CDAudio\shell" "" "Play"\r
+  WriteRegStr HKCR "VLC.CDAudio\shell\Play\command" "" \\r
+    '$INSTDIR\vlc.exe cdda:%1'\r
+  WriteRegStr HKCR "VLC.CDAudio\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'\r
 \r
 SectionEnd\r
 \r
@@ -178,62 +265,81 @@ Section "Start Menu + Desktop Shortcut" SEC02
     "$INSTDIR\vlc.exe" "--intf wxwin --no-wxwin-embed"\r
   CreateShortCut "$SMPROGRAMS\VideoLAN\VLC media player (skins).lnk" \\r
     "$INSTDIR\vlc.exe" "--intf skins"\r
+  CreateShortCut "$SMPROGRAMS\VideoLAN\Reset VLC defaults and quit.lnk" \\r
+    "$INSTDIR\vlc.exe" "--reset-config --reset-plugins-cache --save-config vlc:quit "\r
   CreateShortCut "$DESKTOP\VLC media player.lnk" \\r
     "$INSTDIR\vlc.exe" "--intf wxwin"\r
   WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" \\r
     "${PRODUCT_WEB_SITE}"\r
-  CreateShortCut "$SMPROGRAMS\VideoLAN\Website.lnk" \\r
+  CreateShortCut "$SMPROGRAMS\VideoLAN\${PRODUCT_NAME} Website.lnk" \\r
     "$INSTDIR\${PRODUCT_NAME}.url"\r
+  WriteIniStr "$INSTDIR\Documentation.url" "InternetShortcut" "URL" \\r
+    "${PRODUCT_WEB_SITE}/doc/"\r
+  CreateShortCut "$SMPROGRAMS\VideoLAN\Documentation.lnk" \\r
+    "$INSTDIR\Documentation.url"\r
 SectionEnd\r
 \r
 Section /o "Mozilla plugin" SEC03\r
   SectionIn 2 3\r
-  File  /r mozilla\r
+  File /r mozilla\r
+\r
+  ; doesn't work. bug in mozilla/mozilla firefox or moz documentation (xpt file isn't loaded)\r
+  ; see mozilla bugs 184506 and 159445\r
+  ;!define Moz "SOFTWARE\MozillaPlugins\@videolan.org/vlc,version=${VERSION}"\r
+  ;WriteRegStr HKLM ${Moz} "Description" "VideoLAN VLC plugin for Mozilla"\r
+  ;WriteRegStr HKLM ${Moz} "Path" "$INSTDIR\mozilla\npvlc.dll"\r
+  ;WriteRegStr HKLM ${Moz} "Product" "VLC media player"\r
+  ;WriteRegStr HKLM ${Moz} "Vendor" "VideoLAN"\r
+  ;WriteRegStr HKLM ${Moz} "Version" "${VERSION}"\r
+  ;WriteRegStr HKLM ${Moz} "XPTPath" "$INSTDIR\mozilla\vlcintf.xpt"\r
+\r
+  Push $R0\r
+  Push $R1\r
+  Push $R2\r
+\r
+  !define Index 'Line${__LINE__}'\r
+  StrCpy $R1 "0"\r
+\r
+  "${Index}-Loop:"\r
+\r
+    ; Check for Key\r
+    EnumRegKey $R0 HKLM "SOFTWARE\Mozilla" "$R1"\r
+    StrCmp $R0 "" "${Index}-End"\r
+    IntOp $R1 $R1 + 1\r
+    ReadRegStr $R2 HKLM "SOFTWARE\Mozilla\$R0\Extensions" "Plugins"\r
+    StrCmp $R2 "" "${Index}-Loop" ""\r
+\r
+    CopyFiles "$INSTDIR\mozilla\*" "$R2"\r
+    Goto "${Index}-Loop"\r
+\r
+  "${Index}-End:"\r
+  !undef Index\r
+\r
+SectionEnd\r
+\r
+Section /o "ActiveX plugin" SEC04\r
+  SectionIn 2 3\r
+  SetOutPath "$INSTDIR"\r
+  File activex\axvlc.dll\r
+  RegDLL "$INSTDIR\axvlc.dll"\r
+SectionEnd\r
 \r
-  WriteRegStr HKLM \\r
-    SOFTWARE\MozillaPlugins\@videolan.org/vlc,version=${VERSION} \\r
-    "Path" '"$INSTDIR\mozilla\npvlc.dll"'\r
+Section "Context Menus" SEC05\r
+  SectionIn 1 2 3\r
+  !insertmacro MacroAllExtensions AddContextMenu\r
 SectionEnd\r
 \r
-SubSection "File type associations" SEC04\r
-  ; Make sure we have the same list in uninstall\r
-  !insertmacro RegisterExtensionSection ".a52"\r
-  !insertmacro RegisterExtensionSection ".aac"\r
-  !insertmacro RegisterExtensionSection ".ac3"\r
-  !insertmacro RegisterExtensionSection ".asf"\r
-  !insertmacro RegisterExtensionSection ".asx"\r
-  !insertmacro RegisterExtensionSection ".avi"\r
-  !insertmacro RegisterExtensionSection ".bin"\r
-  !insertmacro RegisterExtensionSection ".cue"\r
-  !insertmacro RegisterExtensionSection ".divx"\r
-  !insertmacro RegisterExtensionSection ".dts"\r
-  !insertmacro RegisterExtensionSection ".dv"\r
-  !insertmacro RegisterExtensionSection ".flac"\r
-  !insertmacro RegisterExtensionSection ".m1v"\r
-  !insertmacro RegisterExtensionSection ".m2v"\r
-  !insertmacro RegisterExtensionSection ".m3u"\r
-  !insertmacro RegisterExtensionSection ".mka"\r
-  !insertmacro RegisterExtensionSection ".mkv"\r
-  !insertmacro RegisterExtensionSection ".mov"\r
-  !insertmacro RegisterExtensionSection ".mp1"\r
-  !insertmacro RegisterExtensionSection ".mp2"\r
-  !insertmacro RegisterExtensionSection ".mp3"\r
-  !insertmacro RegisterExtensionSection ".mp4"\r
-  !insertmacro RegisterExtensionSection ".mpeg"\r
-  !insertmacro RegisterExtensionSection ".mpeg1"\r
-  !insertmacro RegisterExtensionSection ".mpeg2"\r
-  !insertmacro RegisterExtensionSection ".mpeg4"\r
-  !insertmacro RegisterExtensionSection ".mpg"\r
-  !insertmacro RegisterExtensionSection ".ogg"\r
-  !insertmacro RegisterExtensionSection ".ogm"\r
-  !insertmacro RegisterExtensionSection ".pls"\r
-  !insertmacro RegisterExtensionSection ".spx"\r
-  !insertmacro RegisterExtensionSection ".vob"\r
-  !insertmacro RegisterExtensionSection ".vlc"\r
-  !insertmacro RegisterExtensionSection ".wav"\r
-  !insertmacro RegisterExtensionSection ".wma"\r
-  !insertmacro RegisterExtensionSection ".wmv"\r
-SubSectionEnd\r
+SectionGroup "File type associations" SEC06\r
+  SectionGroup "Audio Files"\r
+    !insertmacro MacroAudioExtensions RegisterExtensionSection\r
+  SectionGroupEnd\r
+  SectionGroup "Video Files"\r
+    !insertmacro MacroVideoExtensions RegisterExtensionSection\r
+  SectionGroupEnd\r
+  SectionGroup "Other"\r
+    !insertmacro MacroOtherExtensions RegisterExtensionSection\r
+  SectionGroupEnd\r
+SectionGroupEnd\r
 \r
 Section -Post\r
   WriteUninstaller "$INSTDIR\uninstall.exe"\r
@@ -262,8 +368,12 @@ SectionEnd
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC02} \\r
     "Adds icons to your start menu and your desktop for easy access"\r
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC03} \\r
-    "The VLC mozilla plugin"\r
+    "The VLC Mozilla and Mozilla Firefox plugin"\r
   !insertmacro MUI_DESCRIPTION_TEXT ${SEC04} \\r
+    "The VLC ActiveX plugin"\r
+  !insertmacro MUI_DESCRIPTION_TEXT ${SEC05} \\r
+    "Add context menu items (Play With VLC and Add To VLC's Playlist)"\r
+  !insertmacro MUI_DESCRIPTION_TEXT ${SEC06} \\r
     "Sets VLC media player as the default application for the specified file type"\r
 !insertmacro MUI_FUNCTION_DESCRIPTION_END\r
 \r
@@ -283,43 +393,35 @@ FunctionEnd
 Section Uninstall\r
   SetShellVarContext all\r
 \r
-  ; Make sure we have the same list in install\r
-  !insertmacro UnRegisterExtensionSection ".a52"\r
-  !insertmacro UnRegisterExtensionSection ".aac"\r
-  !insertmacro UnRegisterExtensionSection ".ac3"\r
-  !insertmacro UnRegisterExtensionSection ".asf"\r
-  !insertmacro UnRegisterExtensionSection ".asx"\r
-  !insertmacro UnRegisterExtensionSection ".avi"\r
-  !insertmacro UnRegisterExtensionSection ".bin"\r
-  !insertmacro UnRegisterExtensionSection ".cue"\r
-  !insertmacro UnRegisterExtensionSection ".divx"\r
-  !insertmacro UnRegisterExtensionSection ".dts"\r
-  !insertmacro UnRegisterExtensionSection ".dv"\r
-  !insertmacro UnRegisterExtensionSection ".flac"\r
-  !insertmacro UnRegisterExtensionSection ".m1v"\r
-  !insertmacro UnRegisterExtensionSection ".m2v"\r
-  !insertmacro UnRegisterExtensionSection ".m3u"\r
-  !insertmacro UnRegisterExtensionSection ".mka"\r
-  !insertmacro UnRegisterExtensionSection ".mkv"\r
-  !insertmacro UnRegisterExtensionSection ".mov"\r
-  !insertmacro UnRegisterExtensionSection ".mp1"\r
-  !insertmacro UnRegisterExtensionSection ".mp2"\r
-  !insertmacro UnRegisterExtensionSection ".mp3"\r
-  !insertmacro UnRegisterExtensionSection ".mp4"\r
-  !insertmacro UnRegisterExtensionSection ".mpeg"\r
-  !insertmacro UnRegisterExtensionSection ".mpeg1"\r
-  !insertmacro UnRegisterExtensionSection ".mpeg2"\r
-  !insertmacro UnRegisterExtensionSection ".mpeg4"\r
-  !insertmacro UnRegisterExtensionSection ".mpg"\r
-  !insertmacro UnRegisterExtensionSection ".ogg"\r
-  !insertmacro UnRegisterExtensionSection ".ogm"\r
-  !insertmacro UnRegisterExtensionSection ".pls"\r
-  !insertmacro UnRegisterExtensionSection ".spx"\r
-  !insertmacro UnRegisterExtensionSection ".vob"\r
-  !insertmacro UnRegisterExtensionSection ".vlc"\r
-  !insertmacro UnRegisterExtensionSection ".wav"\r
-  !insertmacro UnRegisterExtensionSection ".wma"\r
-  !insertmacro UnRegisterExtensionSection ".wmv"\r
+  !insertmacro MacroAllExtensions DeleteContextMenu\r
+  !insertmacro MacroAllExtensions UnRegisterExtensionSection\r
+\r
+  UnRegDLL "$INSTDIR\axvlc.dll"\r
+  Delete /REBOOTOK "$INSTDIR\axvlc.dll"\r
+\r
+  ;remove mozilla plugin\r
+  Push $R0\r
+  Push $R1\r
+  Push $R2\r
+\r
+  !define Index 'Line${__LINE__}'\r
+  StrCpy $R1 "0"\r
+\r
+  "${Index}-Loop:"\r
+\r
+    ; Check for Key\r
+    EnumRegKey $R0 HKLM "SOFTWARE\Mozilla" "$R1"\r
+    StrCmp $R0 "" "${Index}-End"\r
+    IntOp $R1 $R1 + 1\r
+    ReadRegStr $R2 HKLM "SOFTWARE\Mozilla\$R0\Extensions" "Plugins"\r
+    StrCmp $R2 "" "${Index}-Loop" ""\r
+\r
+    Delete "$R2\vlcintf.xpt"\r
+    Delete "$R2\npvlc.dll"\r
+    Goto "${Index}-Loop"\r
+\r
+  "${Index}-End:"\r
+  !undef Index\r
 \r
   RMDir "$SMPROGRAMS\VideoLAN"\r
   RMDir /r $SMPROGRAMS\VideoLAN\r