- run.bat / open-firewall.bat: UTF-8 (no BOM) + chcp 65001 instead of cp866/chcp 866. - scripts/set-vnc-password.bat: removed (run.bat syncs the UltraVNC password via ensure-vnc-password.ps1). - scripts/ensure-vnc-password.ps1: use a real RFB VNC-Auth probe to 127.0.0.1:5900 to decide if the password already matches (no UAC when it does); set via createpassword/setpasswd + service restart only when it differs. Works for any password length (no stored-password encoding assumptions). - AGENTS.md: .bat encoding convention updated to UTF-8/chcp 65001; drop set-vnc-password refs.
133 lines
5.6 KiB
Batchfile
133 lines
5.6 KiB
Batchfile
@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 |