📄 vlc.win32.nsi.in
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NSIS installer script for vlc ;; (http://nsis.sourceforge.net) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!include "languages\declaration.nsh"!define PRODUCT_NAME "VLC media player"!define VERSION @VERSION@!define PRODUCT_VERSION @VERSION@!define PRODUCT_GROUP "VideoLAN"!define PRODUCT_PUBLISHER "VideoLAN Team"!define PRODUCT_WEB_SITE "http://www.videolan.org"!define PRODUCT_DIR_REGKEY "Software\VideoLAN\VLC"!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"!define PRODUCT_UNINST_ROOT_KEY "HKLM"!define PRODUCT_ID "{ea92ef52-afe4-4212-bacb-dfe9fca94cd6}"!define MUI_LANGDLL_REGISTRY_ROOT "HKLM"!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_DIR_REGKEY}"!define MUI_LANGDLL_REGISTRY_VALUENAME "Language"@FILE_LIBVLCCORE_DLL@@FILE_LIBVLC_DLL@;;;;;;;;;;;;;;;;;;;;;;;;;; General configuration ;;;;;;;;;;;;;;;;;;;;;;;;;;Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"OutFile ..\vlc-${VERSION}-win32.exeInstallDir "$PROGRAMFILES\VideoLAN\VLC"InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""!ifdef NSIS_LZMA_COMPRESS_WHOLESetCompressor lzma!elseSetCompressor /SOLID lzma!endif;ShowInstDetails show;ShowUnInstDetails showSetOverwrite ifnewerCRCCheck onBrandingText "${PRODUCT_GROUP} ${PRODUCT_NAME}"InstType $Name_InstTypeRecommendedInstType $Name_InstTypeMinimumInstType $Name_InstTypeFull;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NSIS Modern User Interface configuration ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MUI 1.67 compatible ------ !include "MUI.nsh"; MUI Settings !define MUI_ABORTWARNING !define MUI_ICON "vlc48x48.ico" !define MUI_UNICON "vlc48x48.ico" !define MUI_COMPONENTSPAGE_SMALLDESC; Installer pages ; Welcome page !define MUI_WELCOMEPAGE_TITLE_3LINES !insertmacro MUI_PAGE_WELCOME ; License page !insertmacro MUI_PAGE_LICENSE "COPYING.txt" ; Components page !insertmacro MUI_PAGE_COMPONENTS ; Directory page !insertmacro MUI_PAGE_DIRECTORY ; Instfiles page !insertmacro MUI_PAGE_INSTFILES ; Finish page !define MUI_FINISHPAGE_RUN "$INSTDIR\vlc.exe" !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\README.txt" !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED !define MUI_FINISHPAGE_LINK $Link_VisitWebsite !define MUI_FINISHPAGE_LINK_LOCATION "http://www.videolan.org/vlc/" !define MUI_FINISHPAGE_NOREBOOTSUPPORT !insertmacro MUI_PAGE_FINISH; Uninstaller pages !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_COMPONENTS !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH; Language files !insertmacro MUI_LANGUAGE "English" # first language is the default language !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "SimpChinese" !insertmacro MUI_LANGUAGE "TradChinese" !insertmacro MUI_LANGUAGE "Japanese" !insertmacro MUI_LANGUAGE "Korean" !insertmacro MUI_LANGUAGE "Italian" !insertmacro MUI_LANGUAGE "Dutch" !insertmacro MUI_LANGUAGE "Danish" !insertmacro MUI_LANGUAGE "Swedish" !insertmacro MUI_LANGUAGE "Norwegian" !insertmacro MUI_LANGUAGE "Finnish" !insertmacro MUI_LANGUAGE "Greek" !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_LANGUAGE "Portuguese" !insertmacro MUI_LANGUAGE "Arabic" !insertmacro MUI_LANGUAGE "Polish" !insertmacro MUI_LANGUAGE "Romanian" !insertmacro MUI_LANGUAGE "Slovak" !insertmacro MUI_LANGUAGE "Czech"; Reserve files for solid compression !insertmacro MUI_RESERVEFILE_LANGDLL !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS; MUI end ------;;;;;;;;;;;;;;;;;;;;;;;; Macro and Functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1. File type associations ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Function that register one extension for VLCFunction RegisterExtension ; back up old value for extension $R0 (eg. ".opt") ReadRegStr $1 HKCR "$R0" "" StrCmp $1 "" NoBackup StrCmp $1 "VLC$R0" "NoBackup" WriteRegStr HKCR "$R0" "VLC.backup" $1NoBackup: WriteRegStr HKCR "$R0" "" "VLC$R0" ReadRegStr $0 HKCR "VLC$R0" "" WriteRegStr HKCR "VLC$R0" "" "VLC media file ($R0)" WriteRegStr HKCR "VLC$R0\shell" "" "Play" WriteRegStr HKCR "VLC$R0\shell\Play" "" $ShellAssociation_Play WriteRegStr HKCR "VLC$R0\shell\Play\command" "" '"$INSTDIR\vlc.exe" --started-from-file "%1"' WriteRegStr HKCR "VLC$R0\DefaultIcon" "" '"$INSTDIR\vlc.exe",0';;; Vista Only part ; Vista detection ReadRegStr $R1 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion StrCpy $R2 $R1 3 StrCmp $R2 '6.0' ForVista ToEndForVista: WriteRegStr HKLM "Software\Clients\Media\VLC\Capabilities\FileAssociations" "$R0" "VLC$R0"ToEnd:FunctionEnd;; Function that removes one extension that VLC owns.Function un.RegisterExtension ;start of restore script ReadRegStr $1 HKCR "$R0" "" StrCmp $1 "VLC$R0" 0 NoOwn ; only do this if we own it ; Read the old value from Backup ReadRegStr $1 HKCR "$R0" "VLC.backup" StrCmp $1 "" 0 Restore ; if backup="" then delete the whole key DeleteRegKey HKCR "$R0" Goto NoOwnRestore: WriteRegStr HKCR "$R0" "" $1 DeleteRegValue HKCR "$R0" "VLC.backup"NoOwn: DeleteRegKey HKCR "VLC$R0" ;Delete key with association settings DeleteRegKey HKLM "Software\Clients\Media\VLC\Capabilities\FileAssociations\VLC$R0" ; for vistaFunctionEnd!macro RegisterExtensionSection EXT Section ${EXT} SectionIn 1 3 Push $R0 StrCpy $R0 ${EXT} Call RegisterExtension Pop $R0 SectionEnd!macroend!macro UnRegisterExtensionSection EXT Push $R0 StrCpy $R0 ${EXT} Call un.RegisterExtension Pop $R0!macroend!macro WriteRegStrSupportedTypes EXT WriteRegStr HKCR Applications\vlc.exe\SupportedTypes ${EXT} ""!macroend;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Extension lists Macros ;; Those macros calls the previous functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!macro MacroAudioExtensions _action !insertmacro ${_action} ".a52" !insertmacro ${_action} ".aac" !insertmacro ${_action} ".ac3" !insertmacro ${_action} ".dts" !insertmacro ${_action} ".flac" !insertmacro ${_action} ".m4a" !insertmacro ${_action} ".m4p" !insertmacro ${_action} ".mka" !insertmacro ${_action} ".mod" !insertmacro ${_action} ".mp1" !insertmacro ${_action} ".mp2" !insertmacro ${_action} ".mp3" !insertmacro ${_action} ".oma" !insertmacro ${_action} ".ogg" !insertmacro ${_action} ".spx" !insertmacro ${_action} ".wav" !insertmacro ${_action} ".wma" !insertmacro ${_action} ".wma" !insertmacro ${_action} ".xm"!macroend!macro MacroVideoExtensions _action !insertmacro ${_action} ".asf" !insertmacro ${_action} ".avi" !insertmacro ${_action} ".divx" !insertmacro ${_action} ".dv" !insertmacro ${_action} ".flv" !insertmacro ${_action} ".gxf" !insertmacro ${_action} ".m1v" !insertmacro ${_action} ".m2v" !insertmacro ${_action} ".m2ts" !insertmacro ${_action} ".m4v" !insertmacro ${_action} ".mkv" !insertmacro ${_action} ".mov" !insertmacro ${_action} ".mp4" !insertmacro ${_action} ".mpeg" !insertmacro ${_action} ".mpeg1" !insertmacro ${_action} ".mpeg2" !insertmacro ${_action} ".mpeg4" !insertmacro ${_action} ".mpg" !insertmacro ${_action} ".mts" !insertmacro ${_action} ".mxf" !insertmacro ${_action} ".ogm" !insertmacro ${_action} ".ts" !insertmacro ${_action} ".vob" !insertmacro ${_action} ".wmv"!macroend!macro MacroOtherExtensions _action !insertmacro ${_action} ".asx" !insertmacro ${_action} ".bin" !insertmacro ${_action} ".cue" !insertmacro ${_action} ".m3u" !insertmacro ${_action} ".pls" !insertmacro ${_action} ".vlc" !insertmacro ${_action} ".xspf"!macroend; One macro to rule them all!macro MacroAllExtensions _action !insertmacro MacroAudioExtensions ${_action} !insertmacro MacroVideoExtensions ${_action} !insertmacro MacroOtherExtensions ${_action}!macroend;;;;;;;;;;;;;;;;;;;;;;;;;;;; 2. Context menu entries ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Generic function for adding the context menu for one ext.!macro AddContextMenuExt EXT WriteRegStr HKCR ${EXT}\shell\PlayWithVLC "" $ContextMenuEntry_PlayWith WriteRegStr HKCR ${EXT}\shell\PlayWithVLC\command "" '$INSTDIR\vlc.exe --started-from-file --no-playlist-enqueue "%1"' WriteRegStr HKCR ${EXT}\shell\AddToPlaylistVLC "" $ContextMenuEntry_AddToPlaylist WriteRegStr HKCR ${EXT}\shell\AddToPlaylistVLC\command "" '$INSTDIR\vlc.exe --started-from-file --playlist-enqueue "%1"'!macroend!macro AddContextMenu EXT Push $R0 ReadRegStr $R0 HKCR ${EXT} "" !insertmacro AddContextMenuExt $R0 Pop $R0!macroend!macro DeleteContextMenuExt EXT DeleteRegKey HKCR ${EXT}\shell\PlayWithVLC DeleteRegKey HKCR ${EXT}\shell\AddToPlaylistVLC!macroend!macro DeleteContextMenu EXT Push $R0 ReadRegStr $R0 HKCR ${EXT} "" !insertmacro DeleteContextMenuExt $R0 Pop $R0!macroend;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3. Delete prefs and cache ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!macro delprefs StrCpy $0 0 !define Index 'Line${__LINE__}' "${Index}-Loop:" ; FIXME ; this will loop through all the logged users and "virtual" windows users ; (it looks like users are only present in HKEY_USERS when they are logged in) ClearErrors EnumRegKey $1 HKU "" $0 StrCmp $1 "" "${Index}-End" IntOp $0 $0 + 1 ReadRegStr $2 HKU "$1\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" AppData StrCmp $2 "" "${Index}-Loop" RMDir /r "$2\vlc" Goto "${Index}-Loop" "${Index}-End:" !undef Index!macroend;;;;;;;;;;;;;;;; 4. Logging ;;;;;;;;;;;;;;;;Var UninstallLog!macro OpenUninstallLog FileOpen $UninstallLog "$INSTDIR\uninstall.log" a FileSeek $UninstallLog 0 END!macroend!macro CloseUninstallLog FileClose $UninstallLog SetFileAttributes "$INSTDIR\uninstall.log" HIDDEN!macroend;;;;;;;;;;;;;;;;;;;;; 5. Installations ;;;;;;;;;;;;;;;;;;;;;!macro InstallFile FILEREGEX File "${FILEREGEX}" !define Index 'Line${__LINE__}' FindFirst $0 $1 "$INSTDIR\${FILEREGEX}" StrCmp $0 "" "${Index}-End" "${Index}-Loop:" StrCmp $1 "" "${Index}-End" FileWrite $UninstallLog "$1$\r$\n" FindNext $0 $1 Goto "${Index}-Loop" "${Index}-End:" !undef Index!macroend!macro InstallFolder FOLDER File /r "${FOLDER}" Push "${FOLDER}" Call InstallFolderInternal!macroendFunction InstallFolderInternal Pop $9 !define Index 'Line${__LINE__}' FindFirst $0 $1 "$INSTDIR\$9\*" StrCmp $0 "" "${Index}-End" "${Index}-Loop:" StrCmp $1 "" "${Index}-End" StrCmp $1 "." "${Index}-Next" StrCmp $1 ".." "${Index}-Next" IfFileExists "$9\$1\*" 0 "${Index}-Write" Push $0 Push $9 Push "$9\$1" Call InstallFolderInternal Pop $9 Pop $0 Goto "${Index}-Next" "${Index}-Write:" FileWrite $UninstallLog "$9\$1$\r$\n" "${Index}-Next:" FindNext $0 $1 Goto "${Index}-Loop" "${Index}-End:" !undef IndexFunctionEnd;;; End of Macros;;;;;;;;;;;;;;;;;;;;;;; Installer sections ;; The CORE of the ;; installer ;;;;;;;;;;;;;;;;;;;;;;; Section $Name_Section01 SEC01 SectionIn 1 2 3 RO SetShellVarContext all SetOutPath "$INSTDIR" !insertmacro OpenUninstallLog ; VLC.exe, libvlc.dll !insertmacro InstallFile vlc.exe !insertmacro InstallFile vlc.exe.manifest ; All dlls !insertmacro InstallFile *.dll ; Text files !insertmacro InstallFile *.txt ; Subfolders !insertmacro InstallFolder plugins !insertmacro InstallFolder locale !insertmacro InstallFolder osdmenu !insertmacro InstallFolder skins !insertmacro InstallFolder http !insertmacro InstallFolder lua ; URLs WriteIniStr "$INSTDIR\${PRODUCT_GROUP} Website.url" "InternetShortcut" "URL" \ "${PRODUCT_WEB_SITE}" FileWrite $UninstallLog "${PRODUCT_GROUP} Website.url$\r$\n" WriteIniStr "$INSTDIR\Documentation.url" "InternetShortcut" "URL" \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -