mkvtoolnix/packaging/windows/installer/mkvtoolnix.nsi
2024-10-19 15:13:11 +02:00

357 lines
11 KiB
Plaintext

!define PRODUCT_NAME "MKVToolNix"
!define PRODUCT_VERSION "88.0.0"
!define PRODUCT_VERSION_BUILD ""
!define PRODUCT_PUBLISHER "Moritz Bunkus"
!define PRODUCT_WEB_SITE "https://www.bunkus.org/videotools/mkvtoolnix/"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\mkvtoolnix-gui.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define PRODUCT_STARTMENU_REGVAL "NSIS:StartMenuDir"
!define MTX_REGKEY "Software\bunkus.org"
#SetCompress off
SetCompressor /SOLID lzma
SetCompressorDictSize 64
!include "MUI2.nsh"
!include "file_association.nsh"
!include "nsDialogs.nsh"
# MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "mkvtoolnix-gui.ico"
# Language Selection Dialog Settings
!define MUI_LANGDLL_REGISTRY_ROOT "HKCU"
!define MUI_LANGDLL_REGISTRY_KEY "${MTX_REGKEY}"
!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
# Settings for the start menu group page
var ICONS_GROUP
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "${PRODUCT_NAME}"
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${PRODUCT_STARTMENU_REGVAL}"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_RIGHT
!define MUI_HEADERIMAGE_BITMAP "header_image.bmp"
# Settings for the finish page
!define MUI_FINISHPAGE_NOREBOOTSUPPORT
!define MUI_FINISHPAGE_TITLE_3LINES
# Welcome page
!define MUI_WELCOMEFINISHPAGE_BITMAP "welcome_finish_page.bmp"
!define MUI_WELCOMEPAGE_TITLE_3LINES
# Variables for custom dialogs
Var Dialog
Var Label1
Var Link1
Var Link2
Var Link3
Var CheckBox1
Var CheckBox1_State
!insertmacro MUI_PAGE_WELCOME
Page custom mediaFoundationFrameworkCheck mediaFoundationFrameworkCheckLeave
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_STARTMENU Application $ICONS_GROUP
!insertmacro MUI_PAGE_INSTFILES
Page custom showExternalLinks
!insertmacro MUI_PAGE_FINISH
# Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES
# Language files
!macro LANG_LOAD LANGLOAD
!insertmacro MUI_LANGUAGE "${LANGLOAD}"
!include "translations/${LANGLOAD}.nsh"
!undef LANG
!macroend
!macro LANG_STRING NAME VALUE
LangString "${NAME}" "${LANG_${LANG}}" "${VALUE}"
!macroend
!macro LANG_UNSTRING NAME VALUE
!insertmacro LANG_STRING "un.${NAME}" "${VALUE}"
!macroend
# Put English first so that it'll be chosen on Windows versions whose
# language isn't supported.
!insertmacro LANG_LOAD "English"
!insertmacro LANG_LOAD "Basque"
!insertmacro LANG_LOAD "Belarusian"
!insertmacro LANG_LOAD "Bulgarian"
!insertmacro LANG_LOAD "Catalan"
!insertmacro LANG_LOAD "Czech"
!insertmacro LANG_LOAD "Dutch"
!insertmacro LANG_LOAD "French"
!insertmacro LANG_LOAD "German"
!insertmacro LANG_LOAD "Italian"
!insertmacro LANG_LOAD "Japanese"
!insertmacro LANG_LOAD "Korean"
!insertmacro LANG_LOAD "Lithuanian"
!insertmacro LANG_LOAD "Norwegian"
!insertmacro LANG_LOAD "Polish"
!insertmacro LANG_LOAD "Portuguese"
!insertmacro LANG_LOAD "PortugueseBR"
!insertmacro LANG_LOAD "Romanian"
!insertmacro LANG_LOAD "Russian"
!insertmacro LANG_LOAD "Serbian"
!insertmacro LANG_LOAD "SerbianLatin"
!insertmacro LANG_LOAD "Spanish"
!insertmacro LANG_LOAD "SimpChinese"
!insertmacro LANG_LOAD "Swedish"
!insertmacro LANG_LOAD "TradChinese"
!insertmacro LANG_LOAD "Turkish"
!insertmacro LANG_LOAD "Ukrainian"
!define MUI_LANGDLL_ALLLANGUAGES
!insertmacro MUI_RESERVEFILE_LANGDLL
# MUI end ------
!include "WinVer.nsh"
!include "LogicLib.nsh"
!if ${MINGW_PROCESSOR_ARCH} == "amd64"
Name "${PRODUCT_NAME} ${PRODUCT_VERSION} (64-bit)${PRODUCT_VERSION_BUILD}"
BrandingText "${PRODUCT_NAME} ${PRODUCT_VERSION} (64-bit)${PRODUCT_VERSION_BUILD} by ${PRODUCT_PUBLISHER}"
OutFile "mkvtoolnix-64-bit-${PRODUCT_VERSION}-setup.exe"
InstallDir "$PROGRAMFILES64\${PRODUCT_NAME}"
!else
Name "${PRODUCT_NAME} ${PRODUCT_VERSION} (32-bit)${PRODUCT_VERSION_BUILD}"
BrandingText "${PRODUCT_NAME} ${PRODUCT_VERSION} (32-bit)${PRODUCT_VERSION_BUILD} by ${PRODUCT_PUBLISHER}"
OutFile "mkvtoolnix-32-bit-${PRODUCT_VERSION}-setup.exe"
InstallDir "$PROGRAMFILES\${PRODUCT_NAME}"
!endif
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show
VIProductVersion "${PRODUCT_VERSION}.0"
VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "${PRODUCT_NAME}"
VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductVersion" "${PRODUCT_VERSION}${PRODUCT_VERSION_BUILD}"
VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "${PRODUCT_NAME} is a set of tools to create, alter and inspect Matroska files under Linux, other Unices and Windows."
VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "${PRODUCT_PUBLISHER}"
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "${PRODUCT_PUBLISHER} ${PRODUCT_WEB_SITE}"
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "${PRODUCT_NAME} ${PRODUCT_VERSION}${PRODUCT_VERSION_BUILD}"
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${PRODUCT_VERSION}${PRODUCT_VERSION_BUILD}"
RequestExecutionLevel none
Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd
Section "Program files" SEC01
SetShellVarContext all
SetOutPath "$INSTDIR"
File "../*.exe"
File "../*.url"
File /r /x "portable-app" "../data"
File /r "../doc"
File /r "../examples"
File /r "../locale"
File /r "../tools"
; Both if Qt is linked shared and if Dr. MinGW is used:
File /nonfatal "../*.dll"
!if ${MTX_LINK_TYPE} == "shared"
File "../qt.conf"
File /r "../plugins"
!endif
Delete "$INSTDIR\data\portable-app"
# Shortcuts
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
CreateDirectory "$SMPROGRAMS\$ICONS_GROUP"
SetOutPath "$INSTDIR"
Delete "$SMPROGRAMS\$ICONS_GROUP\MKVToolNix GUI.lnk"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\MKVToolNix.lnk" "$INSTDIR\mkvtoolnix-gui.exe" "" "$INSTDIR\mkvtoolnix-gui.exe"
SetOutPath "$INSTDIR\Doc"
CreateDirectory "$SMPROGRAMS\$ICONS_GROUP\Documentation"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Documentation\Command line references.lnk" "$INSTDIR\doc\command_line_references.html"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Documentation\NEWS.txt - What is new, what has changed.lnk" "$INSTDIR\doc\NEWS.txt"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Documentation\README.lnk" "$INSTDIR\doc\README.txt"
!insertmacro MUI_STARTMENU_WRITE_END
${registerExtension} "$INSTDIR\mkvtoolnix-gui.exe" ".mtxcfg" "MKVToolNix Settings"
SetOutPath "$INSTDIR"
SectionEnd
Section -AdditionalIcons
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk" "$INSTDIR\uninst.exe"
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
Section -Post
WriteUninstaller "$INSTDIR\uninst.exe"
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\mkvtoolnix-gui.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\mkvtoolnix-gui.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd
Function mediaFoundationFrameworkCheck
IfFileExists $SYSDIR\evr.dll 0 +2
Return
IfSilent 0 +2
Quit
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
${NSD_CreateLabel} 0 0 100% 32u "$(STRING_MFF_NOT_FOUND)"
Pop $Label1
${NSD_CreateLink} 0 32u 100% 16u "$(STRING_MFF_MORE_INFORMATION)"
Pop $Link1
${NSD_CreateCheckBox} 0 48u 100% 16u "$(STRING_MFF_CONTINUE_ANYWAY)"
Pop $CheckBox1
${NSD_OnClick} $Link1 onClickMediaFoundationMoreInformation
nsDialogs::Show
FunctionEnd
Function mediaFoundationFrameworkCheckLeave
${NSD_GetState} $CheckBox1 $CheckBox1_State
${If} $CheckBox1_State == ${BST_UNCHECKED}
Quit
${EndIf}
FunctionEnd
Function onClickMediaFoundationMoreInformation
Pop $0
ExecShell "open" "https://gitlab.com/mbunkus/mkvtoolnix/wikis/DLLs-not-found"
FunctionEnd
Function showExternalLinks
IfSilent 0 +2
Return
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
${NSD_CreateLabel} 0 0 100% 32u "$(STRING_EXT_LINKS_INTRO)"
Pop $Label1
${NSD_CreateLink} 0 32u 100% 16u "gMKVExtractGUI"
Pop $Link1
${NSD_CreateLink} 0 48u 100% 16u "MKVcleaver"
Pop $Link2
${NSD_OnClick} $Link1 onClickExternalLinkgMKVExtractGUI
${NSD_OnClick} $Link2 onClickExternalLinkMKVcleaver
nsDialogs::Show
FunctionEnd
Function onClickExternalLinkgMKVExtractGUI
Pop $0
ExecShell "open" "https://sourceforge.net/projects/gmkvextractgui/"
FunctionEnd
Function onClickExternalLinkMKVcleaver
Pop $0
ExecShell "open" "https://blogs.sapib.ca/apps/mkvcleaver/"
FunctionEnd
var unRemoveJobs
Function un.onUninstSuccess
HideWindow
IfSilent +2 0
MessageBox MB_ICONINFORMATION|MB_OK "$(STRING_UNINSTALLED_OK)"
FunctionEnd
Function un.onInit
!insertmacro MUI_UNGETLANGUAGE
IfSilent +3 0
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "$(STRING_REMOVE_PROGRAM_QUESTION)" IDYES +2
Abort
StrCpy $unRemoveJobs "No"
IfFileExists "$INSTDIR\jobs\*.*" +2
Return
IfSilent +3 0
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "$(STRING_REMOVE_JOB_FILES_QUESTION)" IDYES +2
Return
StrCpy $unRemoveJobs "Yes"
FunctionEnd
Section Uninstall
SetShellVarContext all
${unregisterExtension} ".mtxcfg" "MKVToolNix Settings"
!insertmacro MUI_STARTMENU_GETFOLDER "Application" $ICONS_GROUP
Delete "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk"
Delete "$SMPROGRAMS\$ICONS_GROUP\Website.lnk"
Delete "$SMPROGRAMS\$ICONS_GROUP\MKVToolNix.lnk"
RMDir /r "$SMPROGRAMS\$ICONS_GROUP\Documentation"
RMDir "$SMPROGRAMS\$ICONS_GROUP"
Delete "$INSTDIR\MKVToolNix.url"
Delete "$INSTDIR\uninst.exe"
Delete "$INSTDIR\mkvextract.exe"
Delete "$INSTDIR\mkvinfo.exe"
Delete "$INSTDIR\mkvinfo-gui.exe"
Delete "$INSTDIR\mkvmerge.exe"
Delete "$INSTDIR\mkvpropedit.exe"
Delete "$INSTDIR\mkvtoolnix.exe"
Delete "$INSTDIR\mkvtoolnix-gui.exe"
Delete "$INSTDIR\lib*.dll"
Delete "$INSTDIR\Qt5*.dll"
Delete "$INSTDIR\zlib1.dll"
Delete "$INSTDIR\qt.conf"
RMDir /r "$INSTDIR\data"
RMDir /r "$INSTDIR\doc"
RMDir /r "$INSTDIR\examples"
RMDir /r "$INSTDIR\locale"
RMDir /r "$INSTDIR\plugins"
RMDir /r "$INSTDIR\share"
RMDir /r "$INSTDIR\tools"
RMDir "$INSTDIR"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
DeleteRegKey HKLM "${MTX_REGKEY}"
DeleteRegKey HKCU "${MTX_REGKEY}"
SetAutoClose true
SectionEnd