refactor: move user-facing scripts to repo root; fix set-password ordering

- install-autostart.bat, uninstall-autostart.bat, restart-autostart.bat,
  open-firewall.bat moved from scripts/ to the repo root (next to run.bat and
  set-password.bat). Internal helpers (autostart-run.bat, ensure-vnc-password.ps1,
  get-novnc.*, get-vnc.ps1, list-ips.ps1) stay in scripts/. autostart-run.bat is
  kept in scripts/ because the scheduled task /TR points at it; moving it would
  break already-installed tasks.
- Updated all references (set-password.bat, run.bat, install/restart-autostart.bat,
  AGENTS.md, README.md).
- set-password.bat: write webvnc.conf BEFORE the UltraVNC sync so the web password
  is configured even if ensure-vnc-password.ps1 fails / its UAC is dismissed
  (previously 'Password is not configured' from install-autostart.bat when the
  sync blocked before conf was written).
- AGENTS.md / README.md structure + autostart sections updated for the new layout.
This commit is contained in:
Codex
2026-08-05 15:38:39 +03:00
parent 754f77a8d0
commit 9b8ee94dd5
8 changed files with 64 additions and 50 deletions
+20 -15
View File
@@ -59,18 +59,22 @@ internal/relay websocket.go — RFC6455 на stdlib; relay.go — WS
internal/vncspawner кросс-ОС поиск/запуск VNC-сервера (build-теги по ОС) internal/vncspawner кросс-ОС поиск/запуск VNC-сервера (build-теги по ОС)
internal/server HTTP-роуты, /api/status, middleware сессии, embed.FS internal/server HTTP-роуты, /api/status, middleware сессии, embed.FS
internal/server/static встроенные ассеты (vnc.html, favicon.ico + noVNC core/app/vendor) internal/server/static встроенные ассеты (vnc.html, favicon.ico + noVNC core/app/vendor)
Все пользовательские точки входа лежат в корне репозитория:
set-password.bat настройка пароля: спрашивает пароль, генерирует хэш и пишет webvnc.conf (HASH= + VNC_PASSWORD=, gitignored) — ДО синхронизации UltraVNC, чтобы веб-пароль был настроен даже если синк упадёт или UAC отменят; затем синхронизирует VNC-пароль UltraVNC (scripts/ensure-vnc-password.ps1). Если установлено задание «web-vnc» — перезапускает его через restart-autostart.bat (с elevation), чтобы живый gateway перезалил пароль; рестарт пропускается, только если пароль не изменился (PBKDF2-хэш всегда новый из-за соли, поэтому изменение детектится сравнением введённого пароля со старым VNC_PASSWORD из webvnc.conf). Саму проверку «запущен ли web-vnc.exe» делает restart-autostart.bat (elevated, надёжно видит SYSTEM-процесс).
run.bat интерактивный запуск в один клик: собирает бинарник/noVNC/VNC, читает пароль из webvnc.conf (НЕ спрашивает — если файла нет, просит сначала запустить set-password.bat); если 5900 уже занят (сервис UltraVNC) — не порождает второй VNC-сервер, а подключается к существующему
install-autostart.bat регистрирует плановое задание «web-vnc» (schtasks /SC ONSTART /RU SYSTEM /RL HIGHEST), запускающее scripts/autostart-run.bat при загрузке ОС; запускать от админа (самопрос elevation); требует уже созданный webvnc.conf.
uninstall-autostart.bat удаляет плановое задание «web-vnc» (от админа).
restart-autostart.bat перезапускает задание «web-vnc» (от админа, auto-elevate): проверяет tasklist, запущен ли web-vnc.exe — если да, делает schtasks /End + пауза 2 c + schtasks /Run; если нет — только schtasks /Run. Вызывается из set-password.bat, или вручную.
open-firewall.bat открыть порт 8080 в Windows Firewall (от админа, один раз).
webvnc.conf создаётся set-password.bat; содержит HASH=<pbkdf2-хэш> и VNC_PASSWORD=<тот же пароль для noVNC>; читается run.bat и scripts/autostart-run.bat; в git не коммитится (.gitignore).
Внутренние помощники (вызываются другими скриптами, не пользователем) — в scripts/:
scripts/autostart-run.bat НЕинтерактивный launcher для автостарта (нет пауз/запросов): читает webvnc.conf, ищет только ЛОКАЛЬНЫЙ VNC-сервер (ничего не качает), запускает web-vnc.exe в foreground. Вызывается плановым заданием из install-autostart.bat.
scripts/ensure-vnc-password.ps1 синхронизирует VNC-пароль UltraVNC с введённым (пишет только при несовпадении; UAC только при смене) — вызывается из set-password.bat.
scripts/get-novnc.{ps1,sh} скачать noVNC scripts/get-novnc.{ps1,sh} скачать noVNC
scripts/get-vnc.ps1 скачать портативный UltraVNC в vnc/ (с верификацией zip) scripts/get-vnc.ps1 скачать портативный UltraVNC в vnc/ (с верификацией zip)
scripts/list-ips.ps1 список IPv4 машины (используется run.bat) scripts/list-ips.ps1 список IPv4 машины (используется run.bat)
scripts/open-firewall.bat открыть порт 8080 в Windows Firewall (от админа)
scripts/ensure-vnc-password.ps1 синхронизирует VNC-пароль UltraVNC с введённым (пишет только при несовпадении; UAC только при смене) — вызывается из set-password.bat
set-password.bat настройка пароля: спрашивает пароль, синхронизирует VNC-пароль UltraVNC (ensure-vnc-password.ps1), генерирует хэш и пишет webvnc.conf (HASH= + VNC_PASSWORD=, gitignored). Если установлено задание «web-vnc» — перезапускает его через scripts/restart-autostart.bat (с elevation), чтобы живый gateway перезалил пароль; рестарт пропускается, только если пароль не изменился (PBKDF2-хэш всегда новый из-за соли, поэтому изменение детектится сравнением введённого пароля со старым VNC_PASSWORD из webvnc.conf). Саму проверку «запущен ли web-vnc.exe» делает restart-autostart.bat (elevated, надёжно видит SYSTEM-процесс).
webvnc.conf создаётся set-password.bat; содержит HASH=<pbkdf2-хэш> и VNC_PASSWORD=<тот же пароль для noVNC>; читается run.bat и scripts/autostart-run.bat; в git не коммитится (.gitignore).
run.bat интерактивный запуск в один клик: собирает бинарник/noVNC/VNC, читает пароль из webvnc.conf (НЕ спрашивает — если файла нет, просит сначала запустить set-password.bat); если 5900 уже занят (сервис UltraVNC) — не порождает второй VNC-сервер, а подключается к существующему
scripts/autostart-run.bat НЕинтерактивный launcher для автостарта (нет пауз/запросов): читает webvnc.conf, ищет только ЛОКАЛЬНЫЙ VNC-сервер (ничего не качает), запускает web-vnc.exe в foreground. Вызывается плановым заданием из install-autostart.bat.
scripts/install-autostart.bat регистрирует плановое задание «web-vnc» (schtasks /SC ONSTART /RU SYSTEM /RL HIGHEST), запускающее scripts/autostart-run.bat при загрузке ОС; запускать от админа (самопрос elevation); требует уже созданный webvnc.conf.
scripts/uninstall-autostart.bat удаляет плановое задание «web-vnc» (от админа).
scripts/restart-autostart.bat перезапускает задание «web-vnc» (от админа, auto-elevate): проверяет tasklist, запущен ли web-vnc.exe — если да, делает schtasks /End + пауза 2 c + schtasks /Run; если нет — только schtasks /Run. Вызывается из set-password.bat, или вручную.
``` ```
## Соглашения и подводные камни ## Соглашения и подводные камни
@@ -125,11 +129,12 @@ scripts/restart-autostart.bat перезапускает задание «web-vn
Чтобы gateway поднимался сам при включении машины (а не интерактивно через `run.bat`), Чтобы gateway поднимался сам при включении машины (а не интерактивно через `run.bat`),
пароль должен быть настроен заранее и не запрашиваться при старте. Поэтому процедура: пароль должен быть настроен заранее и не запрашиваться при старте. Поэтому процедура:
1. **Один раз** запустить `set-password.bat` — он спрашивает пароль, синхронизирует 1. **Один раз** запустить `set-password.bat` — он спрашивает пароль, генерирует хэш
VNC-пароль UltraVNC (`scripts/ensure-vnc-password.ps1`), генерирует хэш и пишет и пишет `webvnc.conf` (HASH + VNC_PASSWORD), а уже ПОТОМ синхронизирует VNC-пароль
`webvnc.conf` (HASH + VNC_PASSWORD). Файл `webvnc.conf`**секрет**, в git не UltraVNC (`scripts/ensure-vnc-password.ps1`)так веб-пароль оказывается настроен,
даже если синк упадёт или UAC отменят. Файл `webvnc.conf`**секрет**, в git не
коммитится (см. `.gitignore`). коммитится (см. `.gitignore`).
2. **Один раз (от админа)** запустить `scripts/install-autostart.bat` — регистрирует 2. **Один раз (от админа)** запустить `install-autostart.bat` — регистрирует
плановое задание `web-vnc` через `schtasks /Create /SC ONSTART /RU SYSTEM /RL HIGHEST`, плановое задание `web-vnc` через `schtasks /Create /SC ONSTART /RU SYSTEM /RL HIGHEST`,
которое при загрузке ОС запускает `scripts/autostart-run.bat`. которое при загрузке ОС запускает `scripts/autostart-run.bat`.
3. `scripts/autostart-run.bat`**неинтерактивный** launcher: читает `webvnc.conf`, 3. `scripts/autostart-run.bat`**неинтерактивный** launcher: читает `webvnc.conf`,
@@ -139,7 +144,7 @@ scripts/restart-autostart.bat перезапускает задание «web-vn
процесс живым). Если `127.0.0.1:5900` уже слушает (сервис UltraVNC) — запускает процесс живым). Если `127.0.0.1:5900` уже слушает (сервис UltraVNC) — запускает
**без** `--spawn` и **без** `--spawn-command`, подключаясь к существующему серверу **без** `--spawn` и **без** `--spawn-command`, подключаясь к существующему серверу
(иначе попытка породить второй VNC-сервер конфликтовала бы с сервисом). (иначе попытка породить второй VNC-сервер конфликтовала бы с сервисом).
4. Снять автостарт: `scripts/uninstall-autostart.bat` (от админа) — `schtasks /Delete`. 4. Снять автостарт: `uninstall-autostart.bat` (от админа) — `schtasks /Delete`.
Замечания: Замечания:
- Задание выполняется от `SYSTEM`, поэтому VNC-сервер, отдавающий рабочий стол, должен - Задание выполняется от `SYSTEM`, поэтому VNC-сервер, отдавающий рабочий стол, должен
@@ -149,7 +154,7 @@ scripts/restart-autostart.bat перезапускает задание «web-vn
- **Смена пароля на ходу:** `web-vnc.exe` читает хэш и `WEBVNC_VNC_PASSWORD` **один раз - **Смена пароля на ходу:** `web-vnc.exe` читает хэш и `WEBVNC_VNC_PASSWORD` **один раз
при старте** (`config.Parse`/`auth.New`) и никогда не перечитывает `webvnc.conf`. Поэтому при старте** (`config.Parse`/`auth.New`) и никогда не перечитывает `webvnc.conf`. Поэтому
`set-password.bat` после перезаписи `webvnc.conf` сам перезапускает задание «web-vnc» через `set-password.bat` после перезаписи `webvnc.conf` сам перезапускает задание «web-vnc» через
`scripts\restart-autostart.bat` (elevation): тот проверяет `tasklist`, запущен ли `restart-autostart.bat` (elevation): тот проверяет `tasklist`, запущен ли
`web-vnc.exe`, и делает `schtasks /End` + `/Run` (или только `/Run`, если процесс не `web-vnc.exe`, и делает `schtasks /End` + `/Run` (или только `/Run`, если процесс не
запущен). Рестарт пропускается, если пароль не изменился (детект по старому `VNC_PASSWORD` запущен). Рестарт пропускается, если пароль не изменился (детект по старому `VNC_PASSWORD`
из `webvnc.conf`, т.к. PBKDF2-хэш всегда новый из-за соли). Если задание не установлено — из `webvnc.conf`, т.к. PBKDF2-хэш всегда новый из-за соли). Если задание не установлено —
+21 -15
View File
@@ -27,9 +27,10 @@ gateway без запросов.
```bat ```bat
set-password.bat set-password.bat
``` ```
Спросит пароль доступа, синхронизирует им пароль UltraVNC-сервиса Спросит пароль доступа, сгенерирует хэш и сохранит его вместе с паролем в
(`scripts\ensure-vnc-password.ps1`, UAC только при смене), сгенерирует хэш и `webvnc.conf` (секрет, в git не коммитится), а затем синхронизирует им пароль
сохранит его вместе с паролем в `webvnc.conf` (секрет, в git не коммитится). UltraVNC-сервиса (`scripts\ensure-vnc-password.ps1`, UAC только при смене).
Веб-пароль оказывается настроен, даже если синк UltraVNC упадёт или UAC отменят.
Используйте ASCII-пароль длиной до 8 символов (VNC-пароль = первые 8 байт). Используйте ASCII-пароль длиной до 8 символов (VNC-пароль = первые 8 байт).
2. **Запустите gateway**: 2. **Запустите gateway**:
@@ -50,17 +51,17 @@ gateway без запросов.
```bat ```bat
set-password.bat :: один раз: пароль -> webvnc.conf set-password.bat :: один раз: пароль -> webvnc.conf
scripts\install-autostart.bat :: один раз (от админа): плановое задание «web-vnc» install-autostart.bat :: один раз (от админа): плановое задание «web-vnc»
``` ```
`install-autostart.bat` регистрирует через `schtasks` задание (`ONSTART`, `SYSTEM`, `install-autostart.bat` регистрирует через `schtasks` задание (`ONSTART`, `SYSTEM`,
`HIGHEST`), которое при загрузке запускает `scripts\autostart-run.bat` — `HIGHEST`), которое при загрузке запускает `scripts\autostart-run.bat` —
неинтерактивный launcher, читающий `webvnc.conf` и не качающий ничего на старте. неинтерактивный launcher, читающий `webvnc.conf` и не качающий ничего на старте.
Запустить сразу без перезагрузки: `schtasks /Run /TN "web-vnc"`. Запустить сразу без перезагрузки: `schtasks /Run /TN "web-vnc"`.
Снять автостарт: `scripts\uninstall-autostart.bat` (от админа). Снять автостарт: `uninstall-autostart.bat` (от админа).
**Смена пароля:** `web-vnc.exe` читает пароль из `webvnc.conf` только при старте и не **Смена пароля:** `web-vnc.exe` читает пароль из `webvnc.conf` только при старте и не
перечитывает его в runtime. Поэтому `set-password.bat` (если задание «web-vnc» установлено) перечитывает его в runtime. Поэтому `set-password.bat` (если задание «web-vnc» установлено)
перезапускает его через `scripts\restart-autostart.bat` (с elevation) — тот проверяет, перезапускает его через `restart-autostart.bat` (с elevation) — тот проверяет,
запущен ли `web-vnc.exe` (если да — стоп + старт, если нет — только старт). Рестарт запущен ли `web-vnc.exe` (если да — стоп + старт, если нет — только старт). Рестарт
пропускается, если пароль не изменился. Для интерактивного `run.bat` просто перезапустите пропускается, если пароль не изменился. Для интерактивного `run.bat` просто перезапустите
его вручную. его вручную.
@@ -190,7 +191,7 @@ web-vnc --gen-hash "ваш-пароль"
По умолчанию Windows Firewall блокирует входящие подключения. Один раз По умолчанию Windows Firewall блокирует входящие подключения. Один раз
выполните от имени администратора: выполните от имени администратора:
```bat ```bat
scripts\open-firewall.bat open-firewall.bat
``` ```
Это откроет входящий TCP-порт 8080. (`run.bat` выводит адреса и подсказку.) Это откроет входящий TCP-порт 8080. (`run.bat` выводит адреса и подсказку.)
@@ -206,17 +207,22 @@ internal/relay WebSocket на stdlib (RFC 6455) + мост WS↔TCP
internal/vncspawner кросс-ОС поиск и запуск VNC-сервера internal/vncspawner кросс-ОС поиск и запуск VNC-сервера
internal/server HTTP-роуты, middleware сессии, встроенная статика internal/server HTTP-роуты, middleware сессии, встроенная статика
internal/server/static встроенные веб-ассеты (vnc.html + core/app/vendor noVNC) internal/server/static встроенные веб-ассеты (vnc.html + core/app/vendor noVNC)
Пользовательские точки входа — в корне репозитория:
run.bat интерактивный запуск: собирает бинарник/noVNC/VNC, читает пароль из webvnc.conf (не спрашивает)
set-password.bat разовая настройка пароля -> webvnc.conf (хэш + VNC-пароль); синхронизирует UltraVNC
install-autostart.bat автостарт при загрузке ОС (schtasks ONSTART/SYSTEM) — от админа
uninstall-autostart.bat снять автостарт — от админа
restart-autostart.bat перезапустить задание «web-vnc» (чтобы применить новый пароль) — от админа
open-firewall.bat открыть порт 8080 в Windows Firewall (один раз, от админа)
webvnc.conf секрет: HASH= + VNC_PASSWORD= (создаётся set-password.bat, gitignored)
Внутренние помощники — в scripts/ (вызываются другими скриптами):
scripts/autostart-run.bat неинтерактивный launcher для автостарта (читает webvnc.conf)
scripts/ensure-vnc-password.ps1 синхронизирует VNC-пароль UltraVNC (вызывается из set-password.bat)
scripts/get-novnc.{ps1,sh} скачать noVNC во встроенную статику scripts/get-novnc.{ps1,sh} скачать noVNC во встроенную статику
scripts/get-vnc.ps1 скачать портативный VNC-сервер (UltraVNC) в папку vnc/ scripts/get-vnc.ps1 скачать портативный VNC-сервер (UltraVNC) в папку vnc/
scripts/list-ips.ps1 список IPv4 машины (используется run.bat) scripts/list-ips.ps1 список IPv4 машины (используется run.bat)
scripts/open-firewall.bat открыть порт 8080 в Windows Firewall (один раз, от админа)
run.bat интерактивный запуск: собирает бинарник/noVNC/VNC, читает пароль из webvnc.conf (не спрашивает)
set-password.bat разовая настройка пароля -> webvnc.conf (хэш + VNC-пароль); синхронизирует UltraVNC
webvnc.conf секрет: HASH= + VNC_PASSWORD= (создаётся set-password.bat, gitignored)
scripts/autostart-run.bat неинтерактивный launcher для автостарта (читает webvnc.conf)
scripts/install-autostart.bat автостарт при загрузке ОС (schtasks ONSTART/SYSTEM) — от админа
scripts/uninstall-autostart.bat снять автостарт — от админа
scripts/restart-autostart.bat перезапустить задание «web-vnc» (чтобы применить новый пароль) — от админа
``` ```
## Кросс-компиляция под другую ОС ## Кросс-компиляция под другую ОС
@@ -43,6 +43,6 @@ echo.
echo Done. web-vnc will start automatically on every boot. echo Done. web-vnc will start automatically on every boot.
echo Start it now (without rebooting): echo Start it now (without rebooting):
echo schtasks /Run /TN "%TASK%" echo schtasks /Run /TN "%TASK%"
echo Remove it with: scripts\uninstall-autostart.bat echo Remove it with: uninstall-autostart.bat
echo. echo.
pause pause
@@ -25,7 +25,7 @@ set "TASK=web-vnc"
schtasks /Query /TN "%TASK%" >nul 2>nul schtasks /Query /TN "%TASK%" >nul 2>nul
if errorlevel 1 ( if errorlevel 1 (
echo [error] Task "%TASK%" is not installed. Run scripts\install-autostart.bat first. echo [error] Task "%TASK%" is not installed. Run install-autostart.bat first.
pause pause
exit /b 1 exit /b 1
) )
+1 -1
View File
@@ -102,7 +102,7 @@ echo http://localhost:8080
for /f "delims=" %%a in ('powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0scripts\list-ips.ps1"') do echo http://%%a:8080 for /f "delims=" %%a in ('powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0scripts\list-ips.ps1"') do echo http://%%a:8080
echo. echo.
echo If it does not open from another machine, run once as administrator: echo If it does not open from another machine, run once as administrator:
echo scripts\open-firewall.bat echo open-firewall.bat
echo. echo.
REM --- 6. Launch --- REM --- 6. Launch ---
+20 -17
View File
@@ -1,16 +1,17 @@
@echo off @echo off
REM ============================================================ REM ============================================================
REM set-password.bat - setup of the web access password. REM set-password.bat - setup of the web access password.
REM Asks for the password, syncs the UltraVNC service password, REM Asks for the password, generates a hash and saves it together
REM generates a hash and saves both to webvnc.conf (gitignored). REM with the VNC password to webvnc.conf (gitignored). AFTER that
REM After this, run.bat and the autostart task start without asking. REM (so the web password is configured even if the next step fails)
REM it syncs the UltraVNC service password via ensure-vnc-password.ps1.
REM REM
REM If the "web-vnc" autostart task is installed, this script also REM If the "web-vnc" autostart task is installed, this script also
REM restarts it (elevated, via scripts\restart-autostart.bat) so the REM restarts it (elevated, via restart-autostart.bat) so the
REM running gateway reloads the new password. The restart is skipped REM running gateway reloads the new password. The restart is skipped
REM only when the password did not actually change (the running gateway REM only when the password did not actually change. restart-autostart.bat
REM already accepts it). restart-autostart.bat checks whether REM checks whether web-vnc.exe is running and stops+starts it, or just
REM web-vnc.exe is running and stops+starts it, or just starts it. REM starts it.
REM ============================================================ REM ============================================================
cd /d "%~dp0" cd /d "%~dp0"
@@ -52,12 +53,7 @@ if "%PW%"=="" (
goto getpw goto getpw
) )
REM --- 4. Sync UltraVNC service password (UAC only if it differs) --- REM --- 4. Generate hash ---
echo Syncing UltraVNC password with the one entered ...
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0scripts\ensure-vnc-password.ps1" -Password "%PW%"
if errorlevel 1 echo [warning] Could not sync the UltraVNC password - continuing.
REM --- 5. Generate hash ---
echo Generating password hash ... echo Generating password hash ...
set "HASH=" set "HASH="
for /f "delims=" %%i in ('web-vnc.exe --gen-hash "%PW%"') do set "HASH=%%i" for /f "delims=" %%i in ('web-vnc.exe --gen-hash "%PW%"') do set "HASH=%%i"
@@ -67,12 +63,19 @@ if "%HASH%"=="" (
exit /b 1 exit /b 1
) )
REM --- 6. Save to webvnc.conf (overwrite) --- REM --- 5. Save to webvnc.conf (overwrite) ---
REM Done BEFORE the UltraVNC sync so the web password is configured
REM even if the sync below fails or is cancelled (UAC).
echo HASH=%HASH%> "webvnc.conf" echo HASH=%HASH%> "webvnc.conf"
echo VNC_PASSWORD=%PW%>> "webvnc.conf" echo VNC_PASSWORD=%PW%>> "webvnc.conf"
set "HASH=" set "HASH="
echo Saved to webvnc.conf. echo Saved to webvnc.conf.
REM --- 6. Sync UltraVNC service password (UAC only if it differs) ---
echo Syncing UltraVNC password with the one entered ...
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0scripts\ensure-vnc-password.ps1" -Password "%PW%"
if errorlevel 1 echo [warning] Could not sync the UltraVNC password - the web password is still saved.
REM --- 7. Apply to the running gateway (if the autostart task is installed) --- REM --- 7. Apply to the running gateway (if the autostart task is installed) ---
REM web-vnc.exe reads the hash + VNC password only at startup, so a REM web-vnc.exe reads the hash + VNC password only at startup, so a
REM restart is required for the new password to take effect. REM restart is required for the new password to take effect.
@@ -86,20 +89,20 @@ if not defined OLD_PW goto do_restart
if /i not "%OLD_PW%"=="%PW%" goto do_restart if /i not "%OLD_PW%"=="%PW%" goto do_restart
echo. echo.
echo Password unchanged - the running gateway keeps accepting it. No restart needed. echo Password unchanged - the running gateway keeps accepting it. No restart needed.
echo If the gateway is not running, start it with: scripts\restart-autostart.bat ^(admin^) echo If the gateway is not running, start it with: restart-autostart.bat ^(admin^)
goto cleanup goto cleanup
:do_restart :do_restart
echo. echo.
echo Applying the new password to the "web-vnc" task ^(needs admin^) ... echo Applying the new password to the "web-vnc" task ^(needs admin^) ...
powershell -NoProfile -Command "Start-Process -FilePath '%~dp0scripts\restart-autostart.bat' -Verb RunAs -Wait" powershell -NoProfile -Command "Start-Process -FilePath '%~dp0restart-autostart.bat' -Verb RunAs -Wait"
goto cleanup goto cleanup
:no_task :no_task
echo. echo.
echo Autostart task "web-vnc" is not installed. echo Autostart task "web-vnc" is not installed.
echo To start on every boot, run once as administrator: echo To start on every boot, run once as administrator:
echo scripts\install-autostart.bat echo install-autostart.bat
:cleanup :cleanup
set "PW=" set "PW="