2008-10-06 15:00:54 +00:00
# Script generated by the HM NIS Edit Script Wizard.
2005-02-26 13:06:00 +00:00
2008-10-06 15:00:54 +00:00
# HM NIS Edit Wizard helper defines
2005-02-26 13:06:00 +00:00
!define PRODUCT_NAME "MKVtoolnix"
2008-10-11 17:17:00 +00:00
!define PRODUCT_VERSION "2.4.0"
2005-02-26 13:06:00 +00:00
!define PRODUCT_PUBLISHER "Moritz Bunkus"
!define PRODUCT_WEB_SITE "http://www.bunkus.org/videotools/mkvtoolnix/"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\AppMainExe.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\mkvmergeGUI"
2006-11-10 13:05:22 +00:00
SetCompressor /SOLID lzma
2005-02-26 13:06:00 +00:00
2008-10-06 15:00:54 +00:00
# MUI 1.67 compatible ------
2005-02-26 13:06:00 +00:00
!include "MUI.nsh"
2008-10-06 15:00:54 +00:00
# MUI Settings
2005-02-26 13:06:00 +00:00
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
2008-10-06 15:00:54 +00:00
# Language Selection Dialog Settings
2005-02-26 13:06:00 +00:00
!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"
2008-10-06 15:00:54 +00:00
# Welcome page
2005-02-26 13:06:00 +00:00
!insertmacro MUI_PAGE_WELCOME
2008-10-06 15:00:54 +00:00
# License page
# !insertmacro MUI_PAGE_LICENSE "..\..\..\pfad\zur\lizenz\IhreLizenz.txt"
# Directory page
2005-02-26 13:06:00 +00:00
!insertmacro MUI_PAGE_DIRECTORY
2008-10-06 15:00:54 +00:00
# Start menu page
2005-02-26 13:06:00 +00:00
var ICONS_GROUP
!define MUI_STARTMENUPAGE_NODISABLE
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "MKVtoolnix"
!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}"
!insertmacro MUI_PAGE_STARTMENU Application $ICONS_GROUP
2008-10-06 15:00:54 +00:00
# Instfiles page
2005-02-26 13:06:00 +00:00
!insertmacro MUI_PAGE_INSTFILES
2008-10-06 15:00:54 +00:00
# Finish page
2005-02-26 13:06:00 +00:00
!define MUI_FINISHPAGE_RUN "$INSTDIR\mmg.exe"
!insertmacro MUI_PAGE_FINISH
2008-10-06 15:00:54 +00:00
# Uninstaller pages
2005-02-26 13:06:00 +00:00
!insertmacro MUI_UNPAGE_INSTFILES
2008-10-06 15:00:54 +00:00
# Language files
2005-02-26 13:06:00 +00:00
!insertmacro MUI_LANGUAGE "English"
2008-10-06 15:00:54 +00:00
# Reserve files
2005-02-26 13:06:00 +00:00
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
2008-10-06 15:00:54 +00:00
# MUI end ------
2005-02-26 13:06:00 +00:00
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
2006-11-10 13:05:22 +00:00
OutFile "mkvtoolnix-unicode-${PRODUCT_VERSION}-setup.exe"
2005-02-26 13:06:00 +00:00
InstallDir "$PROGRAMFILES\MKVtoolnix"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show
2008-10-06 15:00:54 +00:00
# Add something to the PATH environment variable.
# From http://nsis.sourceforge.net/archive/viewpage.php?pageid=91
2005-02-26 13:06:00 +00:00
!verbose 3
!include "WinMessages.NSH"
!verbose 4
2008-10-06 15:00:54 +00:00
# AddToPath - Adds the given dir to the search path.
# Input - head of the stack
# Note - Win9x systems requires reboot
2005-02-26 13:06:00 +00:00
Function AddToPath
Exch $0
Push $1
Push $2
Push $3
# don't add if the path doesn't exist
IfFileExists $0 "" AddToPath_done
ReadEnvStr $1 PATH
Push "$1;"
Push "$0;"
Call StrStr
Pop $2
StrCmp $2 "" "" AddToPath_done
Push "$1;"
Push "$0\;"
Call StrStr
Pop $2
StrCmp $2 "" "" AddToPath_done
GetFullPathName /SHORT $3 $0
Push "$1;"
Push "$3;"
Call StrStr
Pop $2
StrCmp $2 "" "" AddToPath_done
Push "$1;"
Push "$3\;"
Call StrStr
Pop $2
StrCmp $2 "" "" AddToPath_done
Call IsNT
Pop $1
StrCmp $1 1 AddToPath_NT
2008-10-06 15:00:54 +00:00
# Not on NT
2005-02-26 13:06:00 +00:00
StrCpy $1 $WINDIR 2
FileOpen $1 "$1\autoexec.bat" a
FileSeek $1 -1 END
FileReadByte $1 $2
IntCmp $2 26 0 +2 +2 # DOS EOF
FileSeek $1 -1 END # write over EOF
FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n"
FileClose $1
SetRebootFlag true
Goto AddToPath_done
AddToPath_NT:
ReadRegStr $1 HKCU "Environment" "PATH"
StrCpy $2 $1 1 -1 # copy last char
StrCmp $2 ";" 0 +2 # if last char == ;
StrCpy $1 $1 -1 # remove last char
StrCmp $1 "" AddToPath_NTdoIt
StrCpy $0 "$1;$0"
AddToPath_NTdoIt:
WriteRegExpandStr HKCU "Environment" "PATH" $0
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
AddToPath_done:
Pop $3
Pop $2
Pop $1
Pop $0
FunctionEnd
2008-10-06 15:00:54 +00:00
# RemoveFromPath - Remove a given dir from the path
# Input: head of the stack
2005-02-26 13:06:00 +00:00
Function un.RemoveFromPath
Exch $0
Push $1
Push $2
Push $3
Push $4
Push $5
Push $6
IntFmt $6 "%c" 26 # DOS EOF
Call un.IsNT
Pop $1
StrCmp $1 1 unRemoveFromPath_NT
2008-10-06 15:00:54 +00:00
# Not on NT
2005-02-26 13:06:00 +00:00
StrCpy $1 $WINDIR 2
FileOpen $1 "$1\autoexec.bat" r
GetTempFileName $4
FileOpen $2 $4 w
GetFullPathName /SHORT $0 $0
StrCpy $0 "SET PATH=%PATH%;$0"
Goto unRemoveFromPath_dosLoop
unRemoveFromPath_dosLoop:
FileRead $1 $3
StrCpy $5 $3 1 -1 # read last char
StrCmp $5 $6 0 +2 # if DOS EOF
StrCpy $3 $3 -1 # remove DOS EOF so we can compare
StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine
StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine
StrCmp $3 "$0" unRemoveFromPath_dosLoopRemoveLine
StrCmp $3 "" unRemoveFromPath_dosLoopEnd
FileWrite $2 $3
Goto unRemoveFromPath_dosLoop
unRemoveFromPath_dosLoopRemoveLine:
SetRebootFlag true
Goto unRemoveFromPath_dosLoop
unRemoveFromPath_dosLoopEnd:
FileClose $2
FileClose $1
StrCpy $1 $WINDIR 2
Delete "$1\autoexec.bat"
CopyFiles /SILENT $4 "$1\autoexec.bat"
Delete $4
Goto unRemoveFromPath_done
unRemoveFromPath_NT:
ReadRegStr $1 HKCU "Environment" "PATH"
StrCpy $5 $1 1 -1 # copy last char
StrCmp $5 ";" +2 # if last char != ;
StrCpy $1 "$1;" # append ;
Push $1
Push "$0;"
2008-10-06 15:00:54 +00:00
Call un.StrStr # Find `$0;` in $1
Pop $2 # pos of our dir
2005-02-26 13:06:00 +00:00
StrCmp $2 "" unRemoveFromPath_done
2008-10-06 15:00:54 +00:00
# else, it is in path
2005-02-26 13:06:00 +00:00
# $0 - path to add
# $1 - path var
StrLen $3 "$0;"
StrLen $4 $2
StrCpy $5 $1 -$4 # $5 is now the part before the path to remove
StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove
StrCpy $3 $5$6
StrCpy $5 $3 1 -1 # copy last char
StrCmp $5 ";" 0 +2 # if last char == ;
StrCpy $3 $3 -1 # remove last char
WriteRegExpandStr HKCU "Environment" "PATH" $3
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
unRemoveFromPath_done:
Pop $6
Pop $5
Pop $4
Pop $3
Pop $2
Pop $1
Pop $0
FunctionEnd
###########################################
# Utility Functions #
###########################################
2008-10-06 15:00:54 +00:00
# IsNT
# no input
# output, top of the stack = 1 if NT or 0 if not
#
# Usage:
# Call IsNT
# Pop $R0
# ($R0 at this point is 1 or 0)
2005-02-26 13:06:00 +00:00
!macro IsNT un
Function ${un}IsNT
Push $0
ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
StrCmp $0 "" 0 IsNT_yes
2008-10-06 15:00:54 +00:00
# we are not NT.
2005-02-26 13:06:00 +00:00
Pop $0
Push 0
Return
IsNT_yes:
2008-10-06 15:00:54 +00:00
# NT!!!
2005-02-26 13:06:00 +00:00
Pop $0
Push 1
FunctionEnd
!macroend
!insertmacro IsNT ""
!insertmacro IsNT "un."
2008-10-06 15:00:54 +00:00
# StrStr
# input, top of stack = string to search for
# top of stack-1 = string to search in
# output, top of stack (replaces with the portion of the string remaining)
# modifies no other variables.
#
# Usage:
# Push "this is a long ass string"
# Push "ass"
# Call StrStr
# Pop $R0
# ($R0 at this point is "ass string")
2005-02-26 13:06:00 +00:00
!macro StrStr un
Function ${un}StrStr
2008-10-06 15:00:54 +00:00
Exch $R1 # st=haystack,old$R1, $R1=needle
Exch # st=old$R1,haystack
Exch $R2 # st=old$R1,old$R2, $R2=haystack
2005-02-26 13:06:00 +00:00
Push $R3
Push $R4
Push $R5
StrLen $R3 $R1
StrCpy $R4 0
2008-10-06 15:00:54 +00:00
# $R1=needle
# $R2=haystack
# $R3=len(needle)
# $R4=cnt
# $R5=tmp
2005-02-26 13:06:00 +00:00
loop:
StrCpy $R5 $R2 $R3 $R4
StrCmp $R5 $R1 done
StrCmp $R5 "" done
IntOp $R4 $R4 + 1
Goto loop
done:
StrCpy $R1 $R2 "" $R4
Pop $R5
Pop $R4
Pop $R3
Pop $R2
Exch $R1
FunctionEnd
!macroend
!insertmacro StrStr ""
!insertmacro StrStr "un."
Function .onInit
2008-10-06 15:00:54 +00:00
# Check if we're running on a Unicode capable Windows.
# If not, abort.
2006-11-10 13:05:22 +00:00
Call IsNT
Pop $1
StrCmp $1 1 DontBailOut
2008-10-06 15:00:54 +00:00
# Don't install on 95, 98, ME
2008-10-06 14:27:28 +00:00
MessageBox MB_OK|MB_ICONSTOP "You are trying to install MKVToolNix on a Windows version that does not support Unicode (95, 98 or ME). These old Windows versions are not supported anymore. You can still get an older version (v2.2.0) for Windows 95, 98 and ME from http://www.bunkus.org/videotools/mkvtoolnix/"
2006-11-10 13:05:22 +00:00
Abort
DontBailOut:
2005-02-26 13:06:00 +00:00
FunctionEnd
Section "Program files" SEC01
2008-10-06 15:08:44 +00:00
SetShellVarContext all
2005-02-26 13:06:00 +00:00
SetOutPath "$INSTDIR"
SetOverwrite ifnewer
File "mkvmerge.exe"
File "mkvinfo.exe"
File "mkvextract.exe"
File "mmg.exe"
File "*.dll"
File "*.ico"
SetOutPath "$INSTDIR\doc"
File "doc\*.html"
File "doc\ChangeLog.txt"
File "doc\COPYING.txt"
File "doc\README*"
2005-02-26 21:46:30 +00:00
File "doc\*.hh*"
2005-02-26 13:06:00 +00:00
SetOutPath "$INSTDIR\doc\images"
File "doc\images\*.gif"
SetOutPath "$INSTDIR\examples"
File "examples\*.cue"
File "examples\*.dtd"
File "examples\*.xml"
File "examples\example-*.txt"
2008-10-06 15:00:54 +00:00
# Shortcuts
2005-02-26 13:06:00 +00:00
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
CreateDirectory "$SMPROGRAMS\$ICONS_GROUP"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\mkvmerge GUI.lnk" "$INSTDIR\mmg.exe" "" "$INSTDIR\matroskalogo_big.ico"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\mkvinfo GUI.lnk" "$INSTDIR\mkvinfo.exe" "-g" "$INSTDIR\matroskalogo_big.ico"
CreateDirectory "$SMPROGRAMS\$ICONS_GROUP\Documentation"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Documentation\mkvmerge GUI guide.lnk" "$INSTDIR\doc\mkvmerge-gui.html"
CreateDirectory "$SMPROGRAMS\$ICONS_GROUP\Documentation\Command line reference"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Documentation\Command line reference\mkvmerge CLI reference.lnk" "$INSTDIR\doc\mkvmerge.html"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Documentation\Command line reference\mkvinfo CLI reference.lnk" "$INSTDIR\doc\mkvinfo.html"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Documentation\Command line reference\mkvextract CLI reference.lnk" "$INSTDIR\doc\mkvextract.html"
CreateDirectory "$SMPROGRAMS\$ICONS_GROUP\Documentation\Other documentation"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Documentation\Other documentation\ChangeLog - What is new.lnk" "$INSTDIR\doc\ChangeLog.txt"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Documentation\Other documentation\README.lnk" "$INSTDIR\doc\README.txt"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Documentation\Other documentation\The GNU GPL.lnk" "$INSTDIR\doc\Copying.txt"
CreateShortCut "$DESKTOP\mkvmerge GUI.lnk" "$INSTDIR\mmg.exe" "" "$INSTDIR\matroskalogo_big.ico"
!insertmacro MUI_STARTMENU_WRITE_END
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\AppMainExe.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\AppMainExe.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}"
WriteRegStr HKCU "${MTX_REGKEY}\GUI" "installation_path" "$INSTDIR"
Push $INSTDIR
Call AddToPath
SectionEnd
var unRemoveJobs
Function un.onUninstSuccess
HideWindow
MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully uninstalled."
FunctionEnd
Function un.onInit
!insertmacro MUI_UNGETLANGUAGE
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Do you really want to remove $(^Name) and all of its components?" IDYES +2
Abort
StrCpy $unRemoveJobs "No"
IfFileExists "$INSTDIR\jobs\*.*" +2
Return
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Should job files created by the GUI be deleted as well?" IDYES +2
Return
StrCpy $unRemoveJobs "Yes"
FunctionEnd
Section Uninstall
2008-10-06 15:08:44 +00:00
SetShellVarContext all
2005-02-26 13:06:00 +00:00
!insertmacro MUI_STARTMENU_GETFOLDER "Application" $ICONS_GROUP
Delete "$INSTDIR\${PRODUCT_NAME}.url"
Delete "$INSTDIR\uninst.exe"
Delete "$INSTDIR\*.exe"
Delete "$INSTDIR\*.dll"
Delete "$INSTDIR\*.ico"
Delete "$INSTDIR\doc\*.html"
Delete "$INSTDIR\doc\*.txt"
2006-11-10 13:05:22 +00:00
Delete "$INSTDIR\doc\mkvmerge-gui.hhc"
Delete "$INSTDIR\doc\mkvmerge-gui.hhk"
Delete "$INSTDIR\doc\mkvmerge-gui.hhp"
Delete "$INSTDIR\doc\images\*.gif"
2005-02-26 13:06:00 +00:00
Delete "$INSTDIR\examples\*"
Delete "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk"
Delete "$SMPROGRAMS\$ICONS_GROUP\Website.lnk"
Delete "$DESKTOP\mkvmerge GUI.lnk"
Delete "$SMPROGRAMS\$ICONS_GROUP\mkvmerge GUI.lnk"
Delete "$SMPROGRAMS\$ICONS_GROUP\mkvinfo GUI.lnk"
Delete "$SMPROGRAMS\$ICONS_GROUP\Documentation\mkvmerge GUI guide.lnk"
Delete "$SMPROGRAMS\$ICONS_GROUP\Documentation\Command line reference\mkvmerge CLI reference.lnk"
Delete "$SMPROGRAMS\$ICONS_GROUP\Documentation\Command line reference\mkvinfo CLI reference.lnk"
Delete "$SMPROGRAMS\$ICONS_GROUP\Documentation\Command line reference\mkvextract CLI reference.lnk"
Delete "$SMPROGRAMS\$ICONS_GROUP\Documentation\Other documentation\ChangeLog - What is new.lnk"
Delete "$SMPROGRAMS\$ICONS_GROUP\Documentation\Other documentation\README.lnk"
Delete "$SMPROGRAMS\$ICONS_GROUP\Documentation\Other documentation\The GNU GPL.lnk"
Delete "$DESKTOP\mkvmerge GUI.lnk"
RMDir "$SMPROGRAMS\$ICONS_GROUP\Documentation\Other documentation"
RMDir "$SMPROGRAMS\$ICONS_GROUP\Documentation\Command line reference"
RMDir "$SMPROGRAMS\$ICONS_GROUP\Documentation"
RMDir "$SMPROGRAMS\$ICONS_GROUP"
RMDir "$INSTDIR\doc\images"
RMDir "$INSTDIR\doc"
RMDir "$INSTDIR\examples"
2006-11-10 13:05:22 +00:00
2005-02-26 13:06:00 +00:00
StrCmp $unRemoveJobs "Yes" 0 +3
Delete "$INSTDIR\jobs\*.mmg"
RMDir "$INSTDIR\jobs"
2006-11-10 13:05:22 +00:00
2005-02-26 13:06:00 +00:00
RMDir "$INSTDIR"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
DeleteRegKey HKCU "${MTX_REGKEY}"
Push $INSTDIR
Call un.RemoveFromPath
SetAutoClose true
SectionEnd