@echo off
chcp 65001 >nul
title RDP Auto Recover Installer

:: ============================================================
:: 必须管理员权限运行
:: ============================================================
net session >nul 2>&1
if not "%errorlevel%"=="0" (
    echo.
    echo [ERROR] 请右键此 BAT 文件，选择“以管理员身份运行”
    echo.
    pause
    exit /b 1
)

echo.
echo ==========================================
echo   RDP Auto Recover - Installing...
echo ==========================================
echo.

:: 创建目录
if not exist "C:\ops" mkdir "C:\ops"

:: ============================================================
:: 生成实际执行的恢复脚本
:: ============================================================
(
echo @echo off
echo setlocal
echo.
echo set "LOG=C:\ops\rdp-auto-recover.log"
echo.
echo :: 日志超过 5MB 时只保留最近 1000 行
echo if exist "%%LOG%%" ^(
echo     for %%%%A in ^("%%LOG%%"^) do ^(
echo         if %%%%~zA GTR 5242880 ^(
echo             powershell -NoProfile -ExecutionPolicy Bypass -Command "Get-Content '%%LOG%%' -Tail 1000 ^| Set-Content '%%LOG%%.tmp'; Move-Item -Force '%%LOG%%.tmp' '%%LOG%%'"
echo         ^)
echo     ^)
echo ^)
echo.
echo echo [%%date%% %%time%%] Start RDP auto recover check ^>^> "%%LOG%%"
echo.
echo query user ^| findstr /i "rdp-tcp#" ^>nul
echo.
echo if %%errorlevel%%==0 ^(
echo     echo [%%date%% %%time%%] RDP session found, skip restart ^>^> "%%LOG%%"
echo     exit /b 0
echo ^)
echo.
echo echo [%%date%% %%time%%] No RDP session found, restart TermService ^>^> "%%LOG%%"
echo.
echo set "PID="
echo.
echo for /f "tokens=2 delims=:" %%%%a in ^('sc queryex TermService ^^^| findstr /i "PID"'^) do ^(
echo     set "PID=%%%%a"
echo ^)
echo.
echo set "PID=%%PID: =%%"
echo.
echo echo [%%date%% %%time%%] TermService PID=%%PID%% ^>^> "%%LOG%%"
echo.
echo if "%%PID%%"=="" ^(
echo     echo [%%date%% %%time%%] Failed to get TermService PID ^>^> "%%LOG%%"
echo     exit /b 1
echo ^)
echo.
echo if "%%PID%%"=="0" ^(
echo     echo [%%date%% %%time%%] TermService is not running, starting service ^>^> "%%LOG%%"
echo     net start TermService ^>^> "%%LOG%%" 2^>^&1
echo     exit /b 0
echo ^)
echo.
echo echo [%%date%% %%time%%] Killing TermService PID %%PID%% ^>^> "%%LOG%%"
echo taskkill /F /PID %%PID%% ^>^> "%%LOG%%" 2^>^&1
echo.
echo timeout /t 3 /nobreak ^>nul
echo.
echo echo [%%date%% %%time%%] Starting TermService ^>^> "%%LOG%%"
echo net start TermService ^>^> "%%LOG%%" 2^>^&1
echo.
echo echo [%%date%% %%time%%] Done ^>^> "%%LOG%%"
echo exit /b 0
) > "C:\ops\rdp-auto-recover-safe.bat"

echo [OK] Recovery script created:
echo      C:\ops\rdp-auto-recover-safe.bat
echo.

:: ============================================================
:: 创建每10分钟执行一次的计划任务
:: ============================================================
schtasks /create ^
 /tn "RDP Auto Recover Safe" ^
 /tr "C:\ops\rdp-auto-recover-safe.bat" ^
 /sc minute ^
 /mo 10 ^
 /ru SYSTEM ^
 /rl HIGHEST ^
 /f

if not "%errorlevel%"=="0" (
    echo.
    echo [ERROR] Failed to create scheduled task.
    pause
    exit /b 1
)

echo.
echo [OK] Scheduled task created.
echo      Run every 10 minutes as SYSTEM.
echo.

:: ============================================================
:: 手动触发一次
:: ============================================================
schtasks /run /tn "RDP Auto Recover Safe"

echo.
echo [OK] First check triggered.
echo.

timeout /t 3 /nobreak >nul

echo ==========================================
echo Installation completed.
echo ==========================================
echo.
echo Script:
echo   C:\ops\rdp-auto-recover-safe.bat
echo.
echo Log:
echo   C:\ops\rdp-auto-recover.log
echo.
echo Scheduled Task:
echo   RDP Auto Recover Safe
echo.
echo ==========================================
echo.

pause
