@echo off REM ============================================================ REM web-vnc launcher - запуск в один клик. Спрашивает только пароль. REM ============================================================ chcp 65001 >nul cd /d "%~dp0" echo. echo === web-vnc: VNC в браузере === echo. REM --- 1. Бинарник --- if exist "web-vnc.exe" goto havebin where go >nul 2>nul if not errorlevel 1 goto dogobuild echo [ошибка] web-vnc.exe не найден, а Go не установлен. echo Установите Go с https://go.dev/dl/ либо положите собранный web-vnc.exe рядом. echo. pause exit /b 1 :dogobuild echo Собираю web-vnc.exe ... go build -o web-vnc.exe .\cmd\web-vnc if errorlevel 1 goto buildfail :havebin REM --- 2. noVNC-клиент --- if exist "internal\server\static\core\rfb.js" goto havenovnc echo noVNC-клиент ещё не встроен. Пытаюсь скачать ... powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0scripts\get-novnc.ps1" if errorlevel 1 goto novncfail echo Пересобираю с noVNC ... go build -o web-vnc.exe .\cmd\web-vnc goto havenovnc :novncfail echo [предупреждение] Не удалось скачать noVNC (нет интернета?). echo В браузере откроется страница с подсказкой. Повторите позже: scripts\get-novnc.ps1 echo. :havenovnc REM --- 3. VNC-сервер (поиск/загрузка) --- set "SPAWNARGS=" set "SPAWN_CMD=" if exist "vnc\winvnc.exe" goto uselocalvnc if exist "vnc\tvnserver.exe" goto uselocalvnc if exist "C:\Program Files\UltraVNC\winvnc.exe" goto autodetectvnc if exist "C:\Program Files (x86)\UltraVNC\winvnc.exe" goto autodetectvnc if exist "C:\Program Files\uvnc bvba\UltraVNC\winvnc.exe" goto autodetectvnc if exist "C:\Program Files (x86)\uvnc bvba\UltraVNC\winvnc.exe" goto autodetectvnc if exist "C:\Program Files\TightVNC\tvnserver.exe" goto autodetectvnc if exist "C:\Program Files (x86)\TightVNC\tvnserver.exe" goto autodetectvnc echo VNC-сервер не найден. Пытаюсь скачать портативный UltraVNC ... powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0scripts\get-vnc.ps1" if errorlevel 1 goto novncserver if exist "vnc\winvnc.exe" goto uselocalvnc if exist "vnc\tvnserver.exe" goto uselocalvnc goto novncserver :uselocalvnc if exist "vnc\winvnc.exe" set "SPAWN_CMD=vnc\winvnc.exe -run" if exist "vnc\tvnserver.exe" if not defined SPAWN_CMD set "SPAWN_CMD=vnc\tvnserver.exe -run" set "SPAWNARGS=--spawn-command "%SPAWN_CMD%"" echo Найден локальный VNC-сервер: %SPAWN_CMD% goto vncdone :autodetectvnc echo VNC-сервер найден в системе (авто-определение при запуске). goto vncdone :novncserver echo [предупреждение] VNC-сервер не удалось получить. echo Без VNC-сервера рабочий стол не будет транслироваться. echo Установите UltraVNC/TightVNC вручную или повторите: scripts\get-vnc.ps1 echo. :vncdone REM --- 4. Пароль --- :getpw set "PW=" set /p "PW=Введите пароль доступа: " if "%PW%"=="" goto emptypw goto gotpw :emptypw echo Пароль не может быть пустым. goto getpw :gotpw REM --- 4b. Sync UltraVNC password with the one entered (only when it differs) --- echo Синхронизирую пароль UltraVNC с введённым. При несовпадении запросит права администратора... powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0scripts\ensure-vnc-password.ps1" -Password "%PW%" if errorlevel 1 echo [предупреждение] Не удалось синхронизировать пароль UltraVNC - продолжаю. REM --- 5. Хэш пароля + тот же пароль для VNC-сервера --- echo Генерирую хэш пароля ... for /f "delims=" %%i in ('web-vnc.exe --gen-hash "%PW%"') do set "HASH=%%i" if "%HASH%"=="" goto hashfail REM Тот же пароль будет автоматически передан noVNC для авторизации на VNC-сервере. set "WEBVNC_VNC_PASSWORD=%PW%" set "PW=" REM --- 6. Доступные адреса --- echo. echo === Адреса для подключения (порт 8080) === echo http://localhost:8080 for /f "delims=" %%a in ('powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0scripts\list-ips.ps1"') do echo http://%%a:8080 echo. echo Если с другой машины не открывается - один раз выполните от имени echo администратора: scripts\open-firewall.bat echo. REM --- 7. Запуск --- echo Запускаю web-vnc на http://localhost:8080 echo Остановить: Ctrl+C echo. REM --- 6b. 5900 already listening? -> do NOT spawn a 2nd VNC server (avoid conflict with the UltraVNC service) --- set "SPAWNFLAG=--spawn" powershell -NoProfile -Command "try{$c=New-Object Net.Sockets.TcpClient('127.0.0.1',5900);$c.Close();exit 0}catch{exit 1}" if not errorlevel 1 ( echo VNC-сервер уже слушает 127.0.0.1:5900 - подключаюсь к нему без --spawn. set "SPAWNFLAG=" ) web-vnc.exe --password-hash "%HASH%" %SPAWNARGS% %SPAWNFLAG% --listen :8080 echo. echo Сервер остановлен. pause exit /b :buildfail echo Сборка не удалась. pause exit /b 1 :hashfail echo [ошибка] Не удалось сгенерировать хэш пароля. pause exit /b 1