Reconfigure timeout (launcher reinstall of an already-configured pod): - The console pings each configured pod and connects on success, on a loop, and never tore that down — so it kept hammering the pod's old IP with a stale connection while SecureConfig tried to bring the pod up on that address, which timed out. Only a console restart (closing all sockets) cleared it. - DeletePod now Disconnect()s the pod's connection (closes the lingering socket) so delete-to-reconfigure works WITHOUT a console restart. - Reconfiguring a known pod in place now pauses that pod's ping/connect loop (OperationInProgress) and drops its stale connection before SecureConfig, and resumes on completion (success or failure) so it reconnects with the new key. (StopPing kills the ping thread irreversibly, so pause via OperationInProgress.) Note: PodInfo's static mPods registry is dead code (nothing registers), so the real fix is the disconnect, not an unregister. Console deployment: - Console/install.bat: installs the console to C:\Program Files\TeslaConsole, preps the %ProgramData%\Tesla Console data dir (Users: modify), creates a Start Menu shortcut, and adds a per-program inbound firewall rule so it can receive pod discovery beacons. net48 is in-box, no runtime install. - Console/build-package.bat: publishes the console (net48 framework-dependent) to dist\TeslaConsole\App and assembles the package with install.bat. 74 tests green; the pod-config fix is UI/network behavior, validate on a pod. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
96 lines
4.1 KiB
Batchfile
96 lines
4.1 KiB
Batchfile
@echo off
|
|
:: =============================================================================
|
|
:: TeslaConsole - Installation Script
|
|
:: =============================================================================
|
|
:: Installs the operator console on a control PC. Run as Administrator.
|
|
:: Must be run from the package folder produced by build-package.bat:
|
|
::
|
|
:: TeslaConsole\
|
|
:: install.bat <- this file
|
|
:: App\
|
|
:: TeslaConsole.exe + dependencies + RedPlanet\ (content)
|
|
::
|
|
:: The console is .NET Framework 4.8 (framework-dependent) — net48 is in-box on
|
|
:: Windows 10/11, so there is no runtime to install.
|
|
:: =============================================================================
|
|
|
|
setlocal
|
|
|
|
echo ============================================================
|
|
echo TeslaConsole - Installation
|
|
echo ============================================================
|
|
echo.
|
|
|
|
set ROOT=%~dp0
|
|
set APP_SRC=%ROOT%App
|
|
set INSTALL_DIR=C:\Program Files\TeslaConsole
|
|
set EXE=%INSTALL_DIR%\TeslaConsole.exe
|
|
set DATA_DIR=%ProgramData%\Tesla Console
|
|
|
|
:: -- Admin check --------------------------------------------------------------
|
|
net session >nul 2>&1
|
|
if %errorlevel% neq 0 (
|
|
echo ERROR: This script must be run as Administrator.
|
|
pause & exit /b 1
|
|
)
|
|
|
|
:: -- Verify source ------------------------------------------------------------
|
|
if not exist "%APP_SRC%\TeslaConsole.exe" (
|
|
echo ERROR: TeslaConsole.exe not found in %APP_SRC%
|
|
echo Run build-package.bat first, then run install.bat from the package folder.
|
|
pause & exit /b 1
|
|
)
|
|
|
|
:: -- .NET Framework 4.8 check (informational; 528040 = 4.8) --------------------
|
|
set NETREL=0
|
|
for /f "tokens=3" %%v in ('reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" /v Release 2^>nul') do set NETREL=%%v
|
|
if %NETREL% LSS 528040 (
|
|
echo WARNING: .NET Framework 4.8 was not detected ^(Release=%NETREL%^).
|
|
echo It ships in-box with Windows 10/11; install it if the console fails to start.
|
|
echo.
|
|
)
|
|
|
|
:: -- STEP 1: Copy files -------------------------------------------------------
|
|
echo [1/4] Installing to %INSTALL_DIR% ...
|
|
taskkill /F /IM TeslaConsole.exe >nul 2>&1
|
|
if not exist "%INSTALL_DIR%" mkdir "%INSTALL_DIR%"
|
|
xcopy /E /I /Y /Q "%APP_SRC%\*" "%INSTALL_DIR%\" >nul
|
|
if errorlevel 1 (
|
|
echo ERROR: Failed to copy files to %INSTALL_DIR%.
|
|
pause & exit /b 1
|
|
)
|
|
echo Files copied.
|
|
|
|
:: -- STEP 2: Data directory (site config, mission recordings) -----------------
|
|
echo [2/4] Preparing data directory...
|
|
if not exist "%DATA_DIR%" mkdir "%DATA_DIR%"
|
|
:: Grant the local Users group modify access so a normal operator account can
|
|
:: write local.siteconfig / RP Missions when the console is not run elevated.
|
|
icacls "%DATA_DIR%" /grant *S-1-5-32-545:(OI)(CI)M /T >nul 2>&1
|
|
echo %DATA_DIR% (Users: modify access)
|
|
|
|
:: -- STEP 3: Start Menu shortcut ----------------------------------------------
|
|
echo [3/4] Creating Start Menu shortcut...
|
|
powershell -NoProfile -Command "$s=(New-Object -ComObject WScript.Shell).CreateShortcut([Environment]::GetFolderPath('CommonPrograms')+'\TeslaConsole.lnk'); $s.TargetPath='%EXE%'; $s.WorkingDirectory='%INSTALL_DIR%'; $s.IconLocation='%EXE%,0'; $s.Save()" >nul 2>&1
|
|
echo Shortcut created (Start Menu -^> TeslaConsole).
|
|
|
|
:: -- STEP 4: Windows Firewall -------------------------------------------------
|
|
:: The console receives UDP RQST discovery beacons from unconfigured pods, so it
|
|
:: must be allowed to accept inbound traffic. A per-program rule is enough.
|
|
echo [4/4] Allowing TeslaConsole through Windows Firewall...
|
|
netsh advfirewall firewall delete rule name="TeslaConsole" >nul 2>&1
|
|
netsh advfirewall firewall add rule name="TeslaConsole" dir=in action=allow program="%EXE%" enable=yes profile=any >nul
|
|
echo Firewall rule added.
|
|
|
|
:: -- Done ---------------------------------------------------------------------
|
|
echo.
|
|
echo ============================================================
|
|
echo Installation Complete
|
|
echo ============================================================
|
|
echo.
|
|
echo Installed to : %INSTALL_DIR%
|
|
echo Data dir : %DATA_DIR%
|
|
echo Launch from : Start Menu -^> TeslaConsole
|
|
echo.
|
|
pause
|