Files
convert/installer/installer.nsi
T
2026-11-12 20:50:37 +03:00

157 lines
6.5 KiB
NSIS

Unicode True
!include "MUI2.nsh"
!ifndef VERSION
!define VERSION "2.0.0"
!endif
!define APP_NAME "ConvertGUI"
!define EXE_NAME "convert.exe"
!define UNINSTALL_REG "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}"
Name "${APP_NAME} ${VERSION}"
OutFile "../dist/ConvertGUI-Setup-${VERSION}.exe"
InstallDir "$LOCALAPPDATA\Programs\${APP_NAME}"
InstallDirRegKey HKCU "Software\${APP_NAME}" "InstallDir"
RequestExecutionLevel user
SetCompressor /SOLID lzma
SetOverwrite on
!define MUI_ABORTWARNING
!define MUI_ICON "../build/windows/icon.ico"
!define MUI_UNICON "../build/windows/icon.ico"
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_RUN "$INSTDIR\${EXE_NAME}"
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "Russian"
!macro RegisterExt EXT
WriteRegStr HKCU "Software\Classes\SystemFileAssociations\${EXT}\shell\${APP_NAME}" "" "Convert with ${APP_NAME}"
WriteRegStr HKCU "Software\Classes\SystemFileAssociations\${EXT}\shell\${APP_NAME}" "Icon" "$INSTDIR\${EXE_NAME},0"
WriteRegStr HKCU "Software\Classes\SystemFileAssociations\${EXT}\shell\${APP_NAME}\command" "" '"$INSTDIR\${EXE_NAME}" -i "%1"'
!macroend
!macro UnregisterExt EXT
DeleteRegKey HKCU "Software\Classes\SystemFileAssociations\${EXT}\shell\${APP_NAME}"
!macroend
Section "ConvertGUI Application (Required)" SEC_APP
SectionIn RO
SetOutPath "$INSTDIR"
File "../dist/convert.exe"
WriteRegStr HKCU "Software\${APP_NAME}" "InstallDir" "$INSTDIR"
WriteUninstaller "$INSTDIR\uninstall.exe"
WriteRegStr HKCU "${UNINSTALL_REG}" "DisplayName" "${APP_NAME}"
WriteRegStr HKCU "${UNINSTALL_REG}" "DisplayVersion" "${VERSION}"
WriteRegStr HKCU "${UNINSTALL_REG}" "Publisher" "m4xx1m"
WriteRegStr HKCU "${UNINSTALL_REG}" "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteRegStr HKCU "${UNINSTALL_REG}" "DisplayIcon" "$INSTDIR\${EXE_NAME},0"
WriteRegDWORD HKCU "${UNINSTALL_REG}" "NoModify" 1
WriteRegDWORD HKCU "${UNINSTALL_REG}" "NoRepair" 1
CreateDirectory "$SMPROGRAMS\${APP_NAME}"
CreateShortcut "$SMPROGRAMS\${APP_NAME}\${APP_NAME}.lnk" "$INSTDIR\${EXE_NAME}"
CreateShortcut "$SMPROGRAMS\${APP_NAME}\Uninstall ${APP_NAME}.lnk" "$INSTDIR\uninstall.exe"
; Check Microsoft Edge WebView2 Runtime (required on older Windows 10)
SetRegView 32
ReadRegStr $0 HKLM "SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" "pv"
StrCmp $0 "" 0 webview2_done
ReadRegStr $0 HKCU "Software\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" "pv"
StrCmp $0 "" 0 webview2_done
DetailPrint "Installing Microsoft Edge WebView2 Runtime..."
nsExec::ExecToLog 'powershell -NoProfile -ExecutionPolicy Bypass -Command "Invoke-WebRequest -Uri https://go.microsoft.com/fwlink/p/?LinkId=2124703 -OutFile $\'$TEMP\wv2setup.exe$\'; Start-Process $\'$TEMP\wv2setup.exe$\' -ArgumentList $\'/silent$\',$\'/install$\' -Wait; Remove-Item $\'$TEMP\wv2setup.exe$\' -ErrorAction SilentlyContinue"'
webview2_done:
SectionEnd
Section "Bundled FFmpeg & FFprobe" SEC_FFMPEG
SetOutPath "$INSTDIR\bin"
File "../dist/bin/ffmpeg.exe"
File "../dist/bin/ffprobe.exe"
SectionEnd
Section "Windows Explorer Context Menu" SEC_CTX
!insertmacro RegisterExt ".mp4"
!insertmacro RegisterExt ".mkv"
!insertmacro RegisterExt ".mov"
!insertmacro RegisterExt ".avi"
!insertmacro RegisterExt ".webm"
!insertmacro RegisterExt ".m4v"
!insertmacro RegisterExt ".flv"
!insertmacro RegisterExt ".ts"
!insertmacro RegisterExt ".wmv"
SectionEnd
Section "Desktop Shortcut" SEC_DESKTOP
CreateShortcut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\${EXE_NAME}"
SectionEnd
LangString DESC_APP ${LANG_ENGLISH} "Core ConvertGUI application and Start Menu shortcut."
LangString DESC_APP ${LANG_RUSSIAN} "Основное приложение ConvertGUI и ярлык в меню Пуск."
LangString DESC_FFMPEG ${LANG_ENGLISH} "Standalone static FFmpeg & FFprobe binaries (recommended if not installed in PATH)."
LangString DESC_FFMPEG ${LANG_RUSSIAN} "Встроенные FFmpeg и FFprobe (рекомендуется, если не установлены в PATH)."
LangString DESC_CTX ${LANG_ENGLISH} "Add 'Convert with ConvertGUI' to Windows Explorer right-click menu for video files."
LangString DESC_CTX ${LANG_RUSSIAN} "Добавить «Convert with ConvertGUI» в контекстное меню видеофайлов Проводника."
LangString DESC_DESKTOP ${LANG_ENGLISH} "Create a shortcut on the Desktop."
LangString DESC_DESKTOP ${LANG_RUSSIAN} "Создать ярлык на Рабочем столе."
LangString MSG_RUNNING ${LANG_ENGLISH} "${APP_NAME} is currently running.$\r$\n$\r$\nClick OK to close it and proceed with the update, or Cancel to abort."
LangString MSG_RUNNING ${LANG_RUSSIAN} "Приложение ${APP_NAME} сейчас запущено.$\r$\n$\r$\nНажмите ОК, чтобы закрыть его и продолжить обновление, или Отмена для выхода."
Function .onInit
check_running:
nsExec::ExecToStack 'cmd /c tasklist /FI "IMAGENAME eq ${EXE_NAME}" | find /I "${EXE_NAME}"'
Pop $0
StrCmp $0 "0" 0 not_running
MessageBox MB_OKCANCEL|MB_ICONQUESTION $(MSG_RUNNING) IDOK close_it IDCANCEL abort_it
abort_it:
Abort
close_it:
nsExec::ExecToLog 'taskkill /F /IM ${EXE_NAME}'
Sleep 500
Goto check_running
not_running:
FunctionEnd
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_APP} $(DESC_APP)
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_FFMPEG} $(DESC_FFMPEG)
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_CTX} $(DESC_CTX)
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_DESKTOP} $(DESC_DESKTOP)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
Section "Uninstall"
!insertmacro UnregisterExt ".mp4"
!insertmacro UnregisterExt ".mkv"
!insertmacro UnregisterExt ".mov"
!insertmacro UnregisterExt ".avi"
!insertmacro UnregisterExt ".webm"
!insertmacro UnregisterExt ".m4v"
!insertmacro UnregisterExt ".flv"
!insertmacro UnregisterExt ".ts"
!insertmacro UnregisterExt ".wmv"
Delete "$DESKTOP\${APP_NAME}.lnk"
RMDir /r "$SMPROGRAMS\${APP_NAME}"
Delete "$INSTDIR\bin\ffmpeg.exe"
Delete "$INSTDIR\bin\ffprobe.exe"
RMDir "$INSTDIR\bin"
Delete "$INSTDIR\${EXE_NAME}"
Delete "$INSTDIR\uninstall.exe"
RMDir "$INSTDIR"
DeleteRegKey HKCU "${UNINSTALL_REG}"
DeleteRegKey HKCU "Software\${APP_NAME}"
SectionEnd