Files
TIS_RMS/backend/scripts/install_service.bat
T

107 lines
3.6 KiB
Batchfile

@echo off
:: ============================================================================
:: TIS_RMS Backend - Windows Service Installer (NSSM / SC)
:: ============================================================================
SETLOCAL EnableDelayedExpansion
title TIS RMS Server - Windows Service Setup
:: Check for Administrator Privileges
net session >nul 2>&1
if %errorlevel% neq 0 (
echo [ERROR] This script requires Administrator privileges.
echo Please right-click install_service.bat and select "Run as administrator".
echo.
pause
exit /b 1
)
SET SERVICE_NAME=TIS_RMSServer
SET DISPLAY_NAME=TIS RMS Server Manager Service
SET DESCRIPTION=Backend Node.js service for TIS RMS (School Record Management System).
SET BACKEND_DIR=%~dp0..
pushd "%BACKEND_DIR%"
SET BACKEND_DIR=%CD%
popd
echo ============================================================================
echo Installing %DISPLAY_NAME% (%SERVICE_NAME%)...
echo Directory: %BACKEND_DIR%
echo ============================================================================
:: Locate Node.js executable
FOR /F "tokens=*" %%g IN ('where node 2^>nul') DO (
SET NODE_EXE=%%g
GOTO :NODE_FOUND
)
:NODE_FOUND
IF "%NODE_EXE%"=="" (
IF EXIST "C:\Program Files\nodejs\node.exe" (
SET "NODE_EXE=C:\Program Files\nodejs\node.exe"
) ELSE (
echo [ERROR] Node.js not found in PATH or standard location.
echo Please install Node.js before proceeding.
pause
exit /b 1
)
)
echo [OK] Using Node.js at: %NODE_EXE%
:: Ensure logs directory exists
IF NOT EXIST "%BACKEND_DIR%\logs" mkdir "%BACKEND_DIR%\logs"
:: Check if NSSM executable exists in backend or PATH
SET NSSM_EXE=
IF EXIST "%BACKEND_DIR%\bin\nssm.exe" (
SET "NSSM_EXE=%BACKEND_DIR%\bin\nssm.exe"
) ELSE (
FOR /F "tokens=*" %%g IN ('where nssm 2^>nul') DO (
SET NSSM_EXE=%%g
GOTO :NSSM_FOUND
)
)
:NSSM_FOUND
IF NOT "%NSSM_EXE%"=="" (
echo [OK] Using NSSM binary at: %NSSM_EXE%
:: Stop and remove existing service if present
"%NSSM_EXE%" stop %SERVICE_NAME% >nul 2>&1
"%NSSM_EXE%" remove %SERVICE_NAME% confirm >nul 2>&1
:: Install service using NSSM
"%NSSM_EXE%" install %SERVICE_NAME% "%NODE_EXE%" "\"%BACKEND_DIR%\index.js\""
"%NSSM_EXE%" set %SERVICE_NAME% AppDirectory "%BACKEND_DIR%"
"%NSSM_EXE%" set %SERVICE_NAME% DisplayName "%DISPLAY_NAME%"
"%NSSM_EXE%" set %SERVICE_NAME% Description "%DESCRIPTION%"
"%NSSM_EXE%" set %SERVICE_NAME% Start SERVICE_AUTO_START
"%NSSM_EXE%" set %SERVICE_NAME% AppStdout "%BACKEND_DIR%\logs\service_out.log"
"%NSSM_EXE%" set %SERVICE_NAME% AppStderr "%BACKEND_DIR%\logs\service_err.log"
"%NSSM_EXE%" set %SERVICE_NAME% AppRotateFiles 1
"%NSSM_EXE%" set %SERVICE_NAME% AppRotateBytes 10485760
:: Start the service
echo Starting service %SERVICE_NAME%...
"%NSSM_EXE%" start %SERVICE_NAME%
) ELSE (
echo [INFO] NSSM executable not found. Using Windows Service Control (sc.exe) fallback...
:: Use PowerShell to create/register Windows Service if nssm is not present
powershell -Command "New-Service -Name '%SERVICE_NAME%' -BinaryPathName '\"%NODE_EXE%\" \"%BACKEND_DIR%\index.js\"' -DisplayName '%DISPLAY_NAME%' -Description '%DESCRIPTION%' -StartupType Automatic" >nul 2>&1
sc start %SERVICE_NAME% >nul 2>&1
)
echo.
echo ============================================================================
echo [SUCCESS] %SERVICE_NAME% installed successfully!
echo Service status:
sc query %SERVICE_NAME% | findstr /I "STATE"
echo ============================================================================
echo.
pause