@echo off setlocal EnableDelayedExpansion REM =================================================== REM MIBRelease Client Application Update Script REM =================================================== title MIBRelease Update Tool REM Enable Virtual Terminal for ANSI colors (Windows 10+) for /f "tokens=2 delims=[]" %%a in ('ver') do set "winver=%%a" for /f "tokens=2-3 delims=. " %%a in ("%winver%") do set "build=%%a.%%b" if !build! GEQ 10.0 ( reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1 /f >nul 2>&1 ) REM Get timestamp for /f "delims=" %%i in ('powershell -NoProfile -Command "Get-Date -Format 'yyyyMMdd_HHmmss'"') do set "TIMESTAMP=%%i" REM Create log file set "LOG_FILE=%TEMP%\MIBRelease_update_!TIMESTAMP!.log" echo [!TIMESTAMP!] MIBRelease Update started > "!LOG_FILE!" REM Define colors set "GREEN=[92m" set "YELLOW=[93m" set "RED=[91m" set "RESET=[0m" REM Print header echo !GREEN!=============================================!RESET! echo !GREEN! MIBRELEASE CLIENT UPDATER !RESET! echo !GREEN!=============================================!RESET! echo. REM Check admin privileges echo !YELLOW!Checking administrative privileges...!RESET! >nul 2>&1 net session if !errorLevel! neq 0 ( echo !RED!This script requires administrative privileges.!RESET! echo !YELLOW!Requesting elevation...!RESET! echo Set UAC = CreateObject^("Shell.Application"^) > "%TEMP%\elevate.vbs" echo UAC.ShellExecute "%~dpnx0", "", "", "runas", 1 >> "%TEMP%\elevate.vbs" cscript //nologo "%TEMP%\elevate.vbs" del "%TEMP%\elevate.vbs" >nul 2>&1 exit /b ) echo !GREEN!Running with administrative privileges.!RESET! REM Define variables set "CURRENT_DIR=%~dp0" set "APP_NAME=MIBClientapp.exe" set "SERVICE_NAME=MIBService" set "DOWNLOAD_URL=https://static.mibproduction.in/app/versions/latest/MIBRelease.zip" set "ZIP_FILE=!CURRENT_DIR!MIBRelease.zip" set "BACKUP_DIR=!CURRENT_DIR!backup_!TIMESTAMP!\" set "SCRIPT_PATH=%~f0" REM Create backup directory if not exist "!BACKUP_DIR!" mkdir "!BACKUP_DIR!" >nul 2>&1 echo !YELLOW!Created backup directory!RESET! REM Check if app is running echo !YELLOW!Checking for running instances...!RESET! tasklist /FI "IMAGENAME eq !APP_NAME!" 2>NUL | find /I "!APP_NAME!" >NUL if !errorLevel! EQU 0 ( echo !YELLOW!Closing application...!RESET! taskkill /f /im !APP_NAME! >NUL 2>&1 if !errorLevel! EQU 0 ( echo !GREEN!Application terminated.!RESET! ) else ( echo !RED!Failed to terminate. Please close manually.!RESET! pause exit /b 1 ) timeout /t 2 /nobreak >nul ) else ( echo !GREEN!No running instances found.!RESET! ) REM Check and manage service echo !YELLOW!Checking for !SERVICE_NAME! service...!RESET! sc query !SERVICE_NAME! >nul 2>&1 if !errorLevel! EQU 0 ( echo !YELLOW!Stopping and removing service...!RESET! net stop !SERVICE_NAME! >nul 2>&1 if !errorLevel! NEQ 0 sc stop !SERVICE_NAME! >nul 2>&1 timeout /t 3 /nobreak >nul sc delete !SERVICE_NAME! >nul 2>&1 echo !GREEN!Service removed.!RESET! ) else ( echo !GREEN!Service not found.!RESET! ) echo !GREEN!----------------------------------------------------!RESET! REM Backup existing files echo !YELLOW!Backing up files...!RESET! for %%F in ("!CURRENT_DIR!*.exe" "!CURRENT_DIR!*.dll" "!CURRENT_DIR!*.config" "!CURRENT_DIR!*.json") do ( if exist "%%F" copy "%%F" "!BACKUP_DIR!" >nul 2>&1 ) echo !GREEN!Backup completed.!RESET! REM Clean up old files echo !YELLOW!Cleaning up...!RESET! for /f "delims=" %%I in ('dir "!CURRENT_DIR!" /b /a:-d 2^>nul') do ( set "SKIP_FILE=0" if /I "%%I"=="%~nx0" set "SKIP_FILE=1" if /I "%%I"=="MIBRelease.zip" set "SKIP_FILE=1" if /I "%%~xI"==".log" set "SKIP_FILE=1" if /I "%%~xI"==".bat" set "SKIP_FILE=1" if !SKIP_FILE! equ 0 del /q "!CURRENT_DIR!%%I" >nul 2>&1 ) echo !GREEN!Cleanup completed.!RESET! REM Download new version echo !YELLOW!Downloading latest version...!RESET! powershell -NoProfile -ExecutionPolicy Bypass -Command "& {Try {$ProgressPreference = 'SilentlyContinue'; [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri '%DOWNLOAD_URL%' -OutFile '%ZIP_FILE%' -UseBasicParsing -TimeoutSec 300; exit 0} Catch {Write-Host \"Download failed: $($_.Exception.Message)\" -ForegroundColor Red; exit 1}}" if !errorLevel! NEQ 0 ( echo !RED!Download failed. Check your internet connection.!RESET! goto :ERROR ) echo !GREEN!Download completed.!RESET! REM Verify download if not exist "!ZIP_FILE!" ( echo !RED!Downloaded file not found.!RESET! goto :ERROR ) REM Extract files echo !YELLOW!Extracting files...!RESET! powershell -NoProfile -ExecutionPolicy Bypass -Command "& {Try {Add-Type -AssemblyName System.IO.Compression.FileSystem; [System.IO.Compression.ZipFile]::ExtractToDirectory('%ZIP_FILE%', '%CURRENT_DIR%'); exit 0} Catch {Write-Host \"Extraction failed: $($_.Exception.Message)\" -ForegroundColor Red; exit 1}}" if !errorLevel! NEQ 0 ( echo !RED!Extraction failed.!RESET! goto :ERROR ) echo !GREEN!Files extracted successfully.!RESET! REM Clean up ZIP del /q "!ZIP_FILE!" >nul 2>&1 REM Verify executable if not exist "!CURRENT_DIR!!APP_NAME!" ( echo !RED!Error: !APP_NAME! not found in extracted files.!RESET! goto :ERROR ) REM Success echo !GREEN!----------------------------------------------------!RESET! echo !GREEN!Update completed successfully!!RESET! echo !GREEN!Launching application...!RESET! echo [!TIMESTAMP!] Update completed successfully >> "!LOG_FILE!" REM Launch app and self-delete start "" "!CURRENT_DIR!!APP_NAME!" timeout /t 2 /nobreak >nul start /b "" cmd /c del /f /q "%~f0" & exit /b 0 :ERROR echo !RED!----------------------------------------------------!RESET! echo !RED!Update failed!RESET! echo !YELLOW!Restoring backup...!RESET! echo [!TIMESTAMP!] Update failed >> "!LOG_FILE!" if exist "!BACKUP_DIR!" ( xcopy "!BACKUP_DIR!*" "!CURRENT_DIR!" /y /q >nul 2>&1 if !errorLevel! equ 0 ( echo !GREEN!Backup restored.!RESET! ) else ( echo !RED!Failed to restore backup.!RESET! ) ) else ( echo !RED!No backup found.!RESET! ) echo !YELLOW!Log file: !LOG_FILE!!RESET! echo. echo Press any key to exit or wait 10 seconds... timeout /t 10 exit /b 1