]> git.sesse.net Git - vlc/blobdiff - vlc.win32.nsi.in
Fix SRTP Roll-Over-Counter handling
[vlc] / vlc.win32.nsi.in
index 033a9c63a5badbc0de8e29f4f5dd71e60a586552..4b0b0e63fa7123f93a9a9ccc9769e76881987516 100644 (file)
@@ -13,6 +13,8 @@
 !define PRODUCT_UNINST_ROOT_KEY "HKLM"\r
 !define PRODUCT_ID "{ea92ef52-afe4-4212-bacb-dfe9fca94cd6}"\r
 \r
+@FILE_LIBVLC_DLL@\r
+\r
 ;;;;;;;;;;;;;;;;;;;;;;;;;\r
 ; General configuration ;\r
 ;;;;;;;;;;;;;;;;;;;;;;;;;\r
@@ -31,7 +33,8 @@ SetCompressor /SOLID lzma
 SetOverwrite ifnewer\r
 CRCCheck on\r
 \r
-InstType "Normal"\r
+InstType "Recommended"\r
+InstType "Minimum"\r
 InstType "Full"\r
 \r
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
@@ -171,9 +174,9 @@ Function RegisterExtension
 NoBackup:\r
   WriteRegStr HKCR "$R0" "" "VLC$R0"\r
   ReadRegStr $0 HKCR "VLC$R0" ""\r
-  WriteRegStr HKCR "VLC$R0" "" "VLC media file"\r
+  WriteRegStr HKCR "VLC$R0" "" "VLC media file ($R0)"\r
   WriteRegStr HKCR "VLC$R0\shell" "" "Play"\r
-  WriteRegStr HKCR "VLC$R0\shell\Play\command" "" '"$INSTDIR\vlc.exe" --one-instance-when-started-from-file "%1"'\r
+  WriteRegStr HKCR "VLC$R0\shell\Play\command" "" '"$INSTDIR\vlc.exe" --started-from-file "%1"'\r
   WriteRegStr HKCR "VLC$R0\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'\r
 FunctionEnd\r
 \r
@@ -193,8 +196,8 @@ NoOwn:
 FunctionEnd\r
 \r
 !macro RegisterExtensionSection EXT\r
-  Section /o ${EXT}\r
-    SectionIn 2 3\r
+  Section ${EXT}\r
+    SectionIn 1 3\r
     Push $R0\r
     StrCpy $R0 ${EXT}\r
     Call RegisterExtension\r
@@ -219,10 +222,10 @@ FunctionEnd
 \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 --one-instance-when-started-from-file --no-playlist-enqueue "%1"'\r
+  WriteRegStr HKCR ${EXT}\shell\PlayWithVLC\command "" '$INSTDIR\vlc.exe --started-from-file --no-playlist-enqueue "%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-when-started-from-file --playlist-enqueue "%1"'\r
+  WriteRegStr HKCR ${EXT}\shell\AddToPlaylistVLC\command "" '$INSTDIR\vlc.exe --started-from-file --playlist-enqueue "%1"'\r
 !macroend\r
 \r
 !macro DeleteContextMenu EXT\r
@@ -235,7 +238,6 @@ FunctionEnd
 ;;;;;;;;;;;;;;;;;;;;;;;;;;\r
 \r
 !macro delprefs\r
-  SectionIn 2 3\r
   StrCpy $0 0\r
   !define Index 'Line${__LINE__}'\r
   "${Index}-Loop:"\r
@@ -254,6 +256,65 @@ FunctionEnd
   !undef Index\r
 !macroend\r
 \r
+Var UninstallLog\r
+\r
+!macro OpenUninstallLog\r
+  FileOpen $UninstallLog "$INSTDIR\uninstall.log" a\r
+  FileSeek $UninstallLog 0 END\r
+!macroend\r
+\r
+!macro CloseUninstallLog\r
+  FileClose $UninstallLog\r
+  SetFileAttributes "$INSTDIR\uninstall.log" HIDDEN\r
+!macroend\r
+\r
+!macro InstallFile FILEREGEX\r
+  File "${FILEREGEX}"\r
+  !define Index 'Line${__LINE__}'\r
+  FindFirst $0 $1 "$INSTDIR\${FILEREGEX}"\r
+  StrCmp $0 "" "${Index}-End"\r
+  "${Index}-Loop:"\r
+    StrCmp $1 "" "${Index}-End"\r
+    FileWrite $UninstallLog "$1$\r$\n"\r
+    FindNext $0 $1\r
+    Goto "${Index}-Loop"\r
+  "${Index}-End:"\r
+  !undef Index\r
+!macroend\r
+\r
+!macro InstallFolder FOLDER\r
+  File /r "${FOLDER}"\r
+  Push "${FOLDER}"\r
+  Call InstallFolderInternal\r
+!macroend\r
+\r
+Function InstallFolderInternal\r
+  Pop $9\r
+  !define Index 'Line${__LINE__}'\r
+  FindFirst $0 $1 "$INSTDIR\$9\*"\r
+  StrCmp $0 "" "${Index}-End"\r
+  "${Index}-Loop:"\r
+    StrCmp $1 "" "${Index}-End"\r
+    StrCmp $1 "." "${Index}-Next"\r
+    StrCmp $1 ".." "${Index}-Next"\r
+    IfFileExists "$9\$1\*" 0 "${Index}-Write"\r
+      Push $0\r
+      Push $9\r
+      Push "$9\$1"\r
+      Call InstallFolderInternal\r
+      Pop $9\r
+      Pop $0\r
+      Goto "${Index}-Next"\r
+    "${Index}-Write:"\r
+    FileWrite $UninstallLog "$9\$1$\r$\n"\r
+    "${Index}-Next:"\r
+    FindNext $0 $1\r
+    Goto "${Index}-Loop"\r
+  "${Index}-End:"\r
+  !undef Index\r
+FunctionEnd\r
+\r
+\r
 ;;;;;;;;;;;;;;;;;;;;;;\r
 ; Installer sections ;\r
 ;;;;;;;;;;;;;;;;;;;;;;\r
@@ -263,31 +324,44 @@ Section "Media player (required)" SEC01
   SetShellVarContext all\r
   SetOutPath "$INSTDIR"\r
 \r
-  File  vlc.exe\r
-  File  vlc.exe.manifest\r
-  @FILE_LIBVLC_DLL@\r
-  File  *.txt\r
+  !insertmacro OpenUninstallLog\r
+\r
+  !insertmacro InstallFile vlc.exe\r
+  !insertmacro InstallFile vlc.exe.manifest\r
+  !ifdef LIBVLC_DLL\r
+  !insertmacro InstallFile ${LIBVLC_DLL}\r
+  !endif\r
+  !insertmacro InstallFile *.txt\r
 \r
-  File  /r plugins\r
-  File  /r locale\r
-  File  /r osdmenu\r
-  File  /r skins\r
-  File  /r http\r
+  !insertmacro InstallFolder plugins\r
+  !insertmacro InstallFolder locale\r
+  !insertmacro InstallFolder osdmenu\r
+  !insertmacro InstallFolder skins\r
+  !insertmacro InstallFolder http\r
+\r
+  WriteIniStr "$INSTDIR\${PRODUCT_GROUP} Website.url" "InternetShortcut" "URL" \\r
+    "${PRODUCT_WEB_SITE}"\r
+  FileWrite $UninstallLog "${PRODUCT_GROUP} Website.url$\r$\n"\r
+  WriteIniStr "$INSTDIR\Documentation.url" "InternetShortcut" "URL" \\r
+    "${PRODUCT_WEB_SITE}/doc/"\r
+  FileWrite $UninstallLog "Documentation.url$\r$\n"\r
+\r
+  !insertmacro CloseUninstallLog\r
 \r
   ; Add VLC to "recomended programs" for the following extensions\r
   WriteRegStr HKCR Applications\vlc.exe "" ""\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 --one-instance-when-started-from-file "%1"'\r
+    '$INSTDIR\vlc.exe --started-from-file "%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
-    "$INSTDIR\vlc.exe --one-instance-when-started-from-file cdda:%1"\r
+    "$INSTDIR\vlc.exe --started-from-file cdda:%1"\r
   WriteRegStr HKCR "DVD\shell\PlayWithVLC" "" "Play with VLC media player"\r
   WriteRegStr HKCR "DVD\shell\PlayWithVLC\command" "" \\r
-    "$INSTDIR\vlc.exe --one-instance-when-started-from-file dvd:%1"\r
+    "$INSTDIR\vlc.exe --started-from-file dvd:%1"\r
 \r
   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
@@ -298,19 +372,19 @@ Section "Media player (required)" SEC01
 \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 --one-instance-when-started-from-file",0'\r
+  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "DefaultIcon" '"$INSTDIR\vlc.exe --started-from-file",0'\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.DVDMovie" "" "VLC DVD Movie"\r
   WriteRegStr HKCR "VLC.DVDMovie\shell" "" "Play"\r
   WriteRegStr HKCR "VLC.DVDMovie\shell\Play\command" "" \\r
-    '$INSTDIR\vlc.exe --one-instance-when-started-from-file dvd:%1'\r
+    '$INSTDIR\vlc.exe --started-from-file dvd:%1'\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 --one-instance-when-started-from-file cdda:%1'\r
+    '$INSTDIR\vlc.exe --started-from-file cdda:%1'\r
   WriteRegStr HKCR "VLC.CDAudio\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'\r
 \r
 SectionEnd\r
@@ -318,77 +392,103 @@ SectionEnd
 Section "Start Menu Shortcut" SEC02a\r
   SectionIn 1 2 3\r
   CreateDirectory "$SMPROGRAMS\VideoLAN"\r
-  CreateShortCut "$SMPROGRAMS\VideoLAN\VLC media player.lnk" \\r
-    "$INSTDIR\vlc.exe" "--intf wx --wx-embed"\r
-  CreateShortCut "$SMPROGRAMS\VideoLAN\VLC media player (alt).lnk" \\r
-    "$INSTDIR\vlc.exe" "--intf wx --no-wx-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
-  WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" \\r
-    "${PRODUCT_WEB_SITE}"\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
+  CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings"\r
+  CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Audio"\r
+  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Audio\Set Audio mode to DirectX (default).lnk" \\r
+    "$INSTDIR\vlc.exe" "--aout aout_directx --save-config vlc:quit"\r
+  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Audio\Set Audio mode to Waveout.lnk" \\r
+    "$INSTDIR\vlc.exe" "--aout waveout --save-config vlc:quit"\r
+  CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Interface"\r
+  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Interface\Set Main Interface to Skinnable.lnk" \\r
+    "$INSTDIR\vlc.exe" "-I skins --save-config vlc:quit"\r
+  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Interface\Set Main Interface to wxWidgets (default).lnk" \\r
+    "$INSTDIR\vlc.exe" "-I wxwin --save-config vlc:quit"\r
+  CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Video"\r
+  ; FIXME add detection for Vista. Direct3D will be default there, for all others it's DirectX\r
+  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to Direct3D.lnk" \\r
+    "$INSTDIR\vlc.exe" "--vout direct3d --overlay --directx-hw-yuv --save-config vlc:quit"\r
+  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to Direct3D (no hardware acceleration).lnk" \\r
+    "$INSTDIR\vlc.exe" "--vout direct3d --overlay --no-directx-hw-yuv --save-config vlc:quit"\r
+  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX.lnk" \\r
+    "$INSTDIR\vlc.exe" "--vout directx --overlay --directx-hw-yuv --save-config vlc:quit"\r
+  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX (no hardware acceleration).lnk" \\r
+    "$INSTDIR\vlc.exe" "--vout directx --no-overlay --no-directx-hw-yuv --save-config vlc:quit"\r
+  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX (no video overlay).lnk" \\r
+    "$INSTDIR\vlc.exe" "--vout directx --no-overlay --directx-hw-yuv --save-config vlc:quit"\r
+  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to OpenGL.lnk" \\r
+    "$INSTDIR\vlc.exe" "--vout opengl --overlay --save-config vlc:quit"\r
+  CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Reset VLC media player preferences and cache files.lnk" \\r
+    "$INSTDIR\vlc.exe" "--reset-config --reset-plugins-cache --save-config vlc:quit"\r
   CreateShortCut "$SMPROGRAMS\VideoLAN\Documentation.lnk" \\r
     "$INSTDIR\Documentation.url"\r
+  CreateShortCut "$SMPROGRAMS\VideoLAN\Release Notes.lnk" \\r
+    "$INSTDIR\NEWS.txt" ""\r
+  CreateShortCut "$SMPROGRAMS\VideoLAN\${PRODUCT_GROUP} Website.lnk" \\r
+    "$INSTDIR\${PRODUCT_GROUP} Website.url"\r
+  CreateShortCut "$SMPROGRAMS\VideoLAN\VLC media player.lnk" \\r
+    "$INSTDIR\vlc.exe" ""\r
 SectionEnd\r
 \r
 Section "Desktop Shortcut" SEC02b\r
   SectionIn 1 2 3\r
   CreateShortCut "$DESKTOP\VLC media player.lnk" \\r
-    "$INSTDIR\vlc.exe" "--intf wx"\r
+    "$INSTDIR\vlc.exe" ""\r
 SectionEnd\r
 \r
 Section /o "Mozilla plugin" SEC03\r
-  SectionIn 2 3\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
+  SectionIn 3\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
+  SetOutPath "$INSTDIR"\r
+  !insertmacro OpenUninstallLog\r
+  !insertmacro InstallFile mozilla\npvlc.dll\r
+  !insertmacro CloseUninstallLog\r
+\r
+  !define Moz "SOFTWARE\MozillaPlugins\@videolan.org/vlc,version=${VERSION}"\r
+  WriteRegStr HKLM ${Moz} "Description" "VLC Multimedia Plugin"\r
+  WriteRegStr HKLM ${Moz} "Path" "$INSTDIR\npvlc.dll"\r
+  WriteRegStr HKLM ${Moz} "Product" "VLC media player"\r
+  WriteRegStr HKLM ${Moz} "Vendor" "VideoLAN"\r
+  WriteRegStr HKLM ${Moz} "Version" "${VERSION}"\r
+\r
+ ; for very old version of mozilla, these lines may be needed \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\npvlc.dll" "$R2"\r
+ ;  !ifdef LIBVLC_DLL\r
+ ;  CopyFiles ${LIBVLC_DLL} "$R2"\r
+ ;  !endif\r
+ ;  Goto "${Index}-Loop"\r
+\r
+ ;"${Index}-End:"\r
+ ;!undef Index\r
 \r
 SectionEnd\r
 \r
 Section "ActiveX plugin" SEC04\r
-  SectionIn 2 3\r
+  SectionIn 1 3\r
   SetOutPath "$INSTDIR"\r
-  File activex\axvlc.dll\r
+  !insertmacro OpenUninstallLog\r
+  !insertmacro InstallFile activex\axvlc.dll\r
+  !insertmacro CloseUninstallLog\r
   RegDLL "$INSTDIR\axvlc.dll"\r
 SectionEnd\r
 \r
-Section "Context Menus" SEC05\r
-  SectionIn 3\r
+Section /o "Context Menus" SEC05\r
+  SectionIn 3\r
   !insertmacro MacroAllExtensions AddContextMenu\r
   !insertmacro AddContextMenu "Directory"\r
 SectionEnd\r
@@ -471,6 +571,59 @@ SectionEnd
 ; Uninstaller sections ;\r
 ;;;;;;;;;;;;;;;;;;;;;;;;\r
 \r
+; TrimNewlines (copied from NSIS documentation)\r
+; input, top of stack  (e.g. whatever$\r$\n)\r
+; output, top of stack (replaces, with e.g. whatever)\r
+; modifies no other variables.\r
+\r
+Function un.TrimNewlines\r
+ Exch $R0\r
+ Push $R1\r
+ Push $R2\r
+ StrCpy $R1 0\r
\r
+ loop:\r
+   IntOp $R1 $R1 - 1\r
+   StrCpy $R2 $R0 1 $R1\r
+   StrCmp $R2 "$\r" loop\r
+   StrCmp $R2 "$\n" loop\r
+   IntOp $R1 $R1 + 1\r
+   IntCmp $R1 0 no_trim_needed\r
+   StrCpy $R0 $R0 $R1\r
\r
+ no_trim_needed:\r
+   Pop $R2\r
+   Pop $R1\r
+   Exch $R0\r
+FunctionEnd\r
+\r
+Function un.RemoveEmptyDirs\r
+  Pop $9\r
+  !define Index 'Line${__LINE__}'\r
+  FindFirst $0 $1 "$INSTDIR$9*"\r
+  StrCmp $0 "" "${Index}-End"\r
+  "${Index}-Loop:"\r
+    StrCmp $1 "" "${Index}-End"\r
+    StrCmp $1 "." "${Index}-Next"\r
+    StrCmp $1 ".." "${Index}-Next"\r
+      Push $0\r
+      Push $1\r
+      Push $9\r
+      Push "$9$1\"\r
+      Call un.RemoveEmptyDirs\r
+      Pop $9\r
+      Pop $1\r
+      Pop $0\r
+    "${Index}-Remove:"\r
+    RMDir "$INSTDIR$9$1"\r
+    "${Index}-Next:"\r
+    FindNext $0 $1\r
+    Goto "${Index}-Loop"\r
+  "${Index}-End:"\r
+  FindClose $0\r
+  !undef Index\r
+FunctionEnd\r
+\r
 Section "Uninstall" SEC91\r
   SectionIn 1 2 3 RO\r
   SetShellVarContext all\r
@@ -479,6 +632,7 @@ Section "Uninstall" SEC91
   !insertmacro MacroAllExtensions UnRegisterExtensionSection\r
   !insertmacro DeleteContextMenu "Directory"\r
 \r
+  ;remove activex plugin\r
   UnRegDLL "$INSTDIR\axvlc.dll"\r
   Delete /REBOOTOK "$INSTDIR\axvlc.dll"\r
 \r
@@ -499,16 +653,37 @@ Section "Uninstall" SEC91
     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
+    ; old files (0.8.5 and before) that may be lying around\r
+    Delete /REBOOTOK "$R2\npvlc.dll"\r
+    Delete /REBOOTOK "$R2\libvlc.dll"\r
+    Delete /REBOOTOK "$R2\vlcintf.xpt"\r
     Goto "${Index}-Loop"\r
 \r
   "${Index}-End:"\r
   !undef Index\r
+  Delete /REBOOTOK "$INSTDIR\npvlc.dll"\r
 \r
   RMDir "$SMPROGRAMS\VideoLAN"\r
   RMDir /r $SMPROGRAMS\VideoLAN\r
-  RMDir /r $INSTDIR\r
+\r
+  FileOpen $UninstallLog "$INSTDIR\uninstall.log" r\r
+  UninstallLoop:\r
+    ClearErrors\r
+    FileRead $UninstallLog $R0\r
+    IfErrors UninstallEnd\r
+    Push $R0\r
+    Call un.TrimNewLines\r
+    Pop $R0\r
+    Delete "$INSTDIR\$R0"\r
+    Goto UninstallLoop\r
+  UninstallEnd:\r
+  FileClose $UninstallLog\r
+  Delete "$INSTDIR\uninstall.log"\r
+  Delete "$INSTDIR\uninstall.exe"\r
+  Push "\"\r
+  Call un.RemoveEmptyDirs\r
+  RMDir "$INSTDIR"\r
+\r
   DeleteRegKey HKLM Software\VideoLAN\r
 \r
   DeleteRegKey HKCR Applications\vlc.exe\r