107 lines
3.6 KiB
Batchfile
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
|