blob: c69b3af200d377722c0167a0777d9786af0d8e40 [file]
;
; Copyright (c) 2011 The WebM project authors. All Rights Reserved.
;
; Use of this source code is governed by a BSD-style license and patent
; grant that can be found in the LICENSE file in the root of the source
; tree. All contributing project authors may be found in the AUTHORS
; file in the root of the source tree.
;
; WebM Media Foundation components installer.
!include "FileAssociation.nsh"
!include "Library.nsh"
!include "MUI2.nsh"
!include "webmmf_util.nsh"
!include "WinVer.nsh"
!include "x64.nsh"
!define MUI_COMPONENTSPAGE_NODESC
!define MUI_ICON "..\..\webm.ico"
!define MUI_UNICON "..\..\webm.ico"
;--------------------------------
;General
;Name and file
Name "WebM Media Foundation"
OutFile "install_webmmf.exe"
; COM and Media Foundation registration require admin privileges.
RequestExecutionLevel "admin"
; WMMF_UNINSTALL_KEY is where information is stored for Add/Remove Programs
!define WMMF_UNINSTALL_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\webmmf"
; Set compression type for the installer data.
SetCompressor /SOLID lzma
ShowInstDetails show
ShowUnInstDetails show
Var VERSION_STR
; Helper defines used during installation
; WMF Source 32-bit DLL name
!define WMMF_SOURCE_DLL32 "webmmfsource32.dll"
; WMF Source 64-bit DLL name
!define WMMF_SOURCE_DLL64 "webmmfsource64.dll"
; WMF Vorbis decoder 32-bit DLL name
!define WMMF_VORBIS_DLL32 "webmmfvorbisdec32.dll"
; WMF Vorbis decoder 64-bit DLL name
!define WMMF_VORBIS_DLL64 "webmmfvorbisdec64.dll"
; WMF VP8 decoder 32-bit DLL name
!define WMMF_VP8_DLL32 "webmmfvp8dec32.dll"
; WMF VP8 decoder 64-bit DLL name
!define WMMF_VP8_DLL64 "webmmfvp8dec64.dll"
; Path to 32-bit DLLs on NSIS compiler system
!define WMMF_BUILD_PATH32 "..\..\..\dll\webmmf\Win32\Release"
; Path to 64-bit DLLs on NSIS compiler system
!define WMMF_BUILD_PATH64 "..\..\..\dll\webmmf\x64\Release"
; Install path on 32-bit systems
!define WMMF_INSTALL_PATH32 "$COMMONFILES32\WebM Project\webmmf"
; Install path on 64-bit systems
!define WMMF_INSTALL_PATH64 "$COMMONFILES64\WebM Project\webmmf"
; Error message suffixes used with CheckError macro
!define WMMF_INSTALL_ERROR "installation failed."
!define WMMF_UNINSTALL_ERROR "uninstallation failed."
; Omaha (Google Update) defines
!define WMMF_OMAHA_CLIENT_SUBKEY "Software\Google\Update\Clients"
!define WMMF_OMAHA_RESULT_SUBKEY "Software\Google\Update\ClientState"
!define WMMF_OMAHA_GUID "{ED3112D0-5211-11DF-94AF-0026B977EEAA}"
!define WMMF_OMAHA_APPNAME "WebM Media Foundation Components"
!define WMMF_OMAHA_REBOOT_REQUIRED 3010
!define WMMF_OMAHA_SUCCESS 0
; File association related...
!define WMMF_FILE_EXT ".webm"
!define WMMF_FILE_EXT_DESCRIPTION "WebM Media File"
!define WMP_EXTENSIONS_HKLM_SUBKEY \
"Software\Microsoft\Multimedia\WMPlayer\Extensions\.webm"
!define WMP_PATH "$PROGRAMFILES\Windows Media Player\wmplayer.exe"
;--------------------------------
;Interface Settings
;--------------------------------
;Pages
; installer pages
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
; uninstaller pages
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
;--------------------------------
;Languages
!insertmacro MUI_LANGUAGE "English"
;--------------------------------
;Installer Sections
Section "Install" SecInstall
; Allow user to inspect intaller DetailPrint output
SetAutoClose false
${If} ${RunningX64}
; StrCpy $0 "${WMMF_BUILD_PATH64}\${WMMF_SOURCE_DLL64}"
GetDllVersionLocal "${WMMF_BUILD_PATH64}\${WMMF_SOURCE_DLL64}" $R0 $R1
${Else}
; StrCpy $0 "${WMMF_BUILD_PATH32}\${WMMF_SOURCE_DLL32}"
GetDllVersionLocal "${WMMF_BUILD_PATH32}\${WMMF_SOURCE_DLL32}" $R0 $R1
${EndIf}
; GetDllVersionLocal stored the version dwords in R0 and R1
; $R0 = major | minor $R1 = release | build
IntOp $R2 $R0 >> 16
IntOp $R2 $R2 & 0x0000FFFF ; $R2 = major
IntOp $R3 $R0 & 0x0000FFFF ; $R3 = minor
IntOp $R4 $R1 >> 16
IntOp $R4 $R4 & 0x0000FFFF ; $R4 = release
IntOp $R5 $R1 & 0x0000FFFF ; $R5 = build
; Create Add/Remove programs keys
;;http://nsis.sourceforge.net/Add_uninstall_information_to_Add/Remove_Programs
WriteRegDWORD HKLM "${WMMF_UNINSTALL_KEY}" "VersionMajor" $R2
WriteRegDWORD HKLM "${WMMF_UNINSTALL_KEY}" "VersionMinor" $R3
StrCpy $VERSION_STR "$R2.$R3.$R4.$R5"
WriteRegStr HKLM "${WMMF_UNINSTALL_KEY}" "DisplayVersion" $VERSION_STR
WriteRegStr HKLM "${WMMF_UNINSTALL_KEY}" "DisplayName" \
"WebM Media Foundation Components"
WriteRegStr HKLM "${WMMF_UNINSTALL_KEY}" "UninstallString" \
"${WMMF_INSTALL_PATH32}\uninstall_webmmf.exe"
WriteRegDWORD HKLM "${WMMF_UNINSTALL_KEY}" "NoModify" 0x00000001
WriteRegDWORD HKLM "${WMMF_UNINSTALL_KEY}" "NoRepair" 0x00000001
WriteRegStr HKLM "${WMMF_UNINSTALL_KEY}" "Publisher" "WebM Project"
WriteRegStr HKLM "${WMMF_UNINSTALL_KEY}" "URLInfoAbout" \
"http://www.webmproject.org"
WriteRegStr HKLM "${WMMF_UNINSTALL_KEY}" "Comments" \
"WebM Media Foundation COM-server DLLs"
WriteRegStr HKLM "${WMMF_UNINSTALL_KEY}" "InstallLocation" \
"${WMMF_INSTALL_PATH32}"
WriteRegStr HKLM "${WMMF_UNINSTALL_KEY}" "InstallSource" \
"http://code.google.com/p/webm/downloads/list"
WriteRegStr HKLM "${WMMF_OMAHA_CLIENT_SUBKEY}\${WMMF_OMAHA_GUID}" \
"pv" $VERSION_STR
WriteRegStr HKLM "${WMMF_OMAHA_CLIENT_SUBKEY}\${WMMF_OMAHA_GUID}" \
"name" "${WMMF_OMAHA_APPNAME}"
WriteRegStr HKLM "${WMMF_OMAHA_CLIENT_SUBKEY}\${WMMF_OMAHA_GUID}" \
"lang" "en"
ClearErrors
; 32-bit component install (always installed)
;
; Set install directory/write uninstaller
SetOutPath "${WMMF_INSTALL_PATH32}"
WriteUninstaller "${WMMF_INSTALL_PATH32}\uninstall_webmmf.exe"
; define LIBRARY_COM per NSIS docs when using InstallLib
; to register COM DLLs (see Appendix B)
!define LIBRARY_COM
; abuse InstallLib to handle any locked file issues etc
; note that this handles use the File and RegDLL steps for us
!insertmacro InstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED \
"${WMMF_BUILD_PATH32}\${WMMF_SOURCE_DLL32}" \
"${WMMF_INSTALL_PATH32}\${WMMF_SOURCE_DLL32}" \
"${WMMF_INSTALL_PATH32}\upgrade_temp\${WMMF_SOURCE_DLL32}"
!insertmacro CheckError "${WMMF_SOURCE_DLL32} ${WMMF_INSTALL_ERROR}"
!insertmacro InstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED \
"${WMMF_BUILD_PATH32}\${WMMF_VORBIS_DLL32}" \
"${WMMF_INSTALL_PATH32}\${WMMF_VORBIS_DLL32}" \
"${WMMF_INSTALL_PATH32}\upgrade_temp\${WMMF_VORBIS_DLL32}"
!insertmacro CheckError "${WMMF_VORBIS_DLL32} ${WMMF_INSTALL_ERROR}"
!insertmacro InstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED \
"${WMMF_BUILD_PATH32}\${WMMF_VP8_DLL32}" \
"${WMMF_INSTALL_PATH32}\${WMMF_VP8_DLL32}" \
"${WMMF_INSTALL_PATH32}\upgrade_temp\${WMMF_VP8_DLL32}"
!insertmacro CheckError "${WMMF_VP8_DLL32} ${WMMF_INSTALL_ERROR}"
;
; install the 64-bit dll's only on 64-bit systems
${If} ${RunningX64}
;
; Set install directory for x64 DLLs
SetOutPath "${WMMF_INSTALL_PATH64}"
; must define LIBRARY_X64 for 64-bit COM dlls
!define LIBRARY_X64
!insertmacro InstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED \
"${WMMF_BUILD_PATH64}\${WMMF_SOURCE_DLL64}" \
"${WMMF_INSTALL_PATH64}\${WMMF_SOURCE_DLL64}" \
"${WMMF_INSTALL_PATH64}\upgrade_temp\${WMMF_SOURCE_DLL64}"
!insertmacro CheckError "${WMMF_SOURCE_DLL64} ${WMMF_INSTALL_ERROR}"
!insertmacro InstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED \
"${WMMF_BUILD_PATH64}\${WMMF_VORBIS_DLL64}" \
"${WMMF_INSTALL_PATH64}\${WMMF_VORBIS_DLL64}" \
"${WMMF_INSTALL_PATH64}\upgrade_temp\${WMMF_VORBIS_DLL64}"
!insertmacro CheckError "${WMMF_VORBIS_DLL64} ${WMMF_INSTALL_ERROR}"
!insertmacro InstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED \
"${WMMF_BUILD_PATH64}\${WMMF_VP8_DLL64}" \
"${WMMF_INSTALL_PATH64}\${WMMF_VP8_DLL64}" \
"${WMMF_INSTALL_PATH64}\upgrade_temp\${WMMF_VP8_DLL64}"
!insertmacro CheckError "${WMMF_VP8_DLL64} ${WMMF_INSTALL_ERROR}"
!undef LIBRARY_X64
${EndIf} ; ${If} ${RunningX64}
${If} ${AtLeastWin7}
; Associate WebM files with Windows Media Player
DetailPrint "Associating .webm files with Windows Media Player..."
${RegisterExtension} "${WMP_PATH}" "${WMMF_FILE_EXT}" \
"${WMMF_FILE_EXT_DESCRIPTION}"
; And let WMP know it's OK to open them...
WriteRegDWORD HKLM "${WMP_EXTENSIONS_HKLM_SUBKEY}" "Permissions" 0x00000001
WriteRegDWORD HKLM "${WMP_EXTENSIONS_HKLM_SUBKEY}" "Runtime" 0x00000001
DetailPrint "Done."
${EndIf} ; ${If} ${AtLeastWin7}
# Tell Omaha we need a reboot to complete update/install
IfRebootFlag 0 +3
WriteRegDWORD HKLM "${WMMF_OMAHA_RESULT_SUBKEY}\${WMMF_OMAHA_GUID}" \
"InstallerResult" ${WMMF_OMAHA_REBOOT_REQUIRED}
goto done
; TODO(tomfinegan): update |CheckError| to set an error flag that we
; can check here instead of blindly reporting success
WriteRegDWORD HKLM "${WMMF_OMAHA_RESULT_SUBKEY}\${WMMF_OMAHA_GUID}" \
"InstallerResult" ${WMMF_OMAHA_SUCCESS}
done:
SectionEnd
;--------------------------------
;Uninstaller Section
Section "Uninstall" SecUninstall
; Allow user to inspect intaller DetailPrint output
SetAutoClose false
; 32-bit component uninstall (always removed)
;
; Set install directory
SetOutPath "${WMMF_INSTALL_PATH32}"
; abuse InstallLib to handle any locked file issues etc
; note that this handles use the File and RegDLL steps for us
!insertmacro UnInstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED \
"${WMMF_INSTALL_PATH32}\${WMMF_SOURCE_DLL32}"
!insertmacro CheckError "${WMMF_SOURCE_DLL32} ${WMMF_UNINSTALL_ERROR}"
!insertmacro UnInstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED \
"${WMMF_INSTALL_PATH32}\${WMMF_VORBIS_DLL32}"
!insertmacro CheckError "${WMMF_VORBIS_DLL32} ${WMMF_UNINSTALL_ERROR}"
!insertmacro UnInstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED \
"${WMMF_INSTALL_PATH32}\${WMMF_VP8_DLL32}"
!insertmacro CheckError "${WMMF_VP8_DLL32} ${WMMF_UNINSTALL_ERROR}"
Delete /REBOOTOK "${WMMF_INSTALL_PATH32}"
RMDir /r /REBOOTOK "${WMMF_INSTALL_PATH32}"
ClearErrors
;
; uninstall the 64-bit dll's only on 64-bit systems
${If} ${RunningX64}
;
; Set install directory for x64 DLLs
SetOutPath "${WMMF_INSTALL_PATH64}"
!define LIBRARY_X64
!insertmacro UnInstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED \
"${WMMF_INSTALL_PATH64}\${WMMF_SOURCE_DLL64}"
!insertmacro CheckError "${WMMF_SOURCE_DLL64} ${WMMF_UNINSTALL_ERROR}"
!insertmacro UnInstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED \
"${WMMF_INSTALL_PATH64}\${WMMF_VORBIS_DLL64}"
!insertmacro CheckError "${WMMF_VORBIS_DLL64} ${WMMF_UNINSTALL_ERROR}"
!insertmacro UnInstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED \
"${WMMF_INSTALL_PATH64}\${WMMF_VP8_DLL64}"
!insertmacro CheckError "${WMMF_VP8_DLL64} ${WMMF_UNINSTALL_ERROR}"
!undef LIBRARY_X64
Delete /REBOOTOK "${WMMF_INSTALL_PATH64}\uninstall_webmmf.exe"
RMDir /r /REBOOTOK "${WMMF_INSTALL_PATH64}"
${EndIf}
; Delete WebM Windows Media Player file association
${UnRegisterExtension} "${WMMF_FILE_EXT}" "${WMMF_FILE_EXT_DESCRIPTION}"
; TODO(tomfinegan): Seems a bit heavy handed to delete the extensions
; subkey for .webm in WMP land... otoh it might be
; better to err on the side of keeping the registry
; clean.
DeleteRegKey HKLM "${WMP_EXTENSIONS_HKLM_SUBKEY}"
DeleteRegKey HKLM "${WMMF_UNINSTALL_KEY}"
DeleteRegKey HKLM "${WMMF_OMAHA_CLIENT_SUBKEY}\${WMMF_OMAHA_GUID}"
DeleteRegKey HKCU "${WMMF_OMAHA_RESULT_SUBKEY}\${WMMF_OMAHA_GUID}"
DeleteRegKey HKLM "${WMMF_OMAHA_RESULT_SUBKEY}\${WMMF_OMAHA_GUID}"
SectionEnd