Files
web-vnc/run.bat
T
Codex 71e2fef4d9 fix: use UTF-8 BOM for .bat so cmd shows Cyrillic correctly
UTF-8 without BOM + chcp 65001 showed '????' because cmd reads .bat under the
OEM codepage, not chcp. A UTF-8 BOM makes cmd read the file as UTF-8 regardless
of the console codepage; verified Cyrillic in echo/set/for displays correctly
even when cmd starts at cp866. AGENTS.md updated accordingly.
2026-07-30 22:50:23 +03:00

133 lines
5.6 KiB
Batchfile
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@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