Add install scripts
This commit is contained in:
112
install-windows.bat
Normal file
112
install-windows.bat
Normal file
@@ -0,0 +1,112 @@
|
||||
@echo off
|
||||
setlocal EnableExtensions EnableDelayedExpansion
|
||||
|
||||
set "SERVICE_NAME=LuxtoolsClient"
|
||||
set "DISPLAY_NAME=luxtools-client"
|
||||
set "INSTALL_DIR=%ProgramFiles%\LuxtoolsClient"
|
||||
set "BIN_PATH=%INSTALL_DIR%\luxtools-client.exe"
|
||||
set "DATA_DIR=%ProgramData%\LuxtoolsClient"
|
||||
set "TOKEN_FILE=%DATA_DIR%\token.txt"
|
||||
set "LISTEN=127.0.0.1:8765"
|
||||
set "SCRIPT_DIR=%~dp0"
|
||||
set "SRC_EXE=%SCRIPT_DIR%luxtools-client.exe"
|
||||
|
||||
rem Optional args:
|
||||
rem --listen host:port
|
||||
|
||||
if /I "%~1"=="-h" goto :usage
|
||||
if /I "%~1"=="--help" goto :usage
|
||||
|
||||
:parse
|
||||
if "%~1"=="" goto :main
|
||||
if /I "%~1"=="--listen" (
|
||||
set "LISTEN=%~2"
|
||||
shift
|
||||
shift
|
||||
goto :parse
|
||||
)
|
||||
echo Unknown arg: %~1
|
||||
goto :usage
|
||||
|
||||
:usage
|
||||
echo Usage: %~nx0 [--listen host:port]
|
||||
echo.
|
||||
echo Installs/updates %DISPLAY_NAME% as a Windows Service (auto-start).
|
||||
echo Re-running updates the installed binary and restarts the service.
|
||||
echo The token is stored in %TOKEN_FILE%.
|
||||
exit /b 2
|
||||
|
||||
:main
|
||||
rem Require admin
|
||||
net session >nul 2>&1
|
||||
if not "%ERRORLEVEL%"=="0" (
|
||||
echo This script must be run as Administrator.
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
if not exist "%INSTALL_DIR%" mkdir "%INSTALL_DIR%" >nul 2>&1
|
||||
if not exist "%DATA_DIR%" mkdir "%DATA_DIR%" >nul 2>&1
|
||||
|
||||
if not exist "%SRC_EXE%" (
|
||||
echo Missing binary next to script: %SRC_EXE%
|
||||
echo Build it first ^(e.g. "go build -o luxtools-client.exe ."^) and re-run.
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
set "CURRENT_TOKEN="
|
||||
if exist "%TOKEN_FILE%" (
|
||||
set /p CURRENT_TOKEN=<"%TOKEN_FILE%"
|
||||
)
|
||||
|
||||
set "SUGGESTED_TOKEN="
|
||||
if "%CURRENT_TOKEN%"=="" (
|
||||
rem Generate a URL-safe-ish token; PowerShell is available on modern Windows.
|
||||
for /f "usebackq delims=" %%T in (`powershell -NoProfile -Command "$b=[byte[]]::new(32);[Security.Cryptography.RandomNumberGenerator]::Fill($b);[Convert]::ToBase64String($b).TrimEnd('=') -replace '\+','-' -replace '/','_'"`) do (
|
||||
set "SUGGESTED_TOKEN=%%T"
|
||||
)
|
||||
)
|
||||
|
||||
echo.
|
||||
if not "%CURRENT_TOKEN%"=="" (
|
||||
echo A token is already configured. Press Enter to keep it, or type a new one.
|
||||
) else (
|
||||
echo No token configured yet. Press Enter to use a generated token, or type your own.
|
||||
)
|
||||
set /p TOKEN_INPUT=Token:
|
||||
|
||||
if not "%TOKEN_INPUT%"=="" (
|
||||
set "TOKEN=%TOKEN_INPUT%"
|
||||
) else (
|
||||
if not "%CURRENT_TOKEN%"=="" (
|
||||
set "TOKEN=%CURRENT_TOKEN%"
|
||||
) else (
|
||||
set "TOKEN=%SUGGESTED_TOKEN%"
|
||||
)
|
||||
)
|
||||
|
||||
>"%TOKEN_FILE%" (echo %TOKEN%)
|
||||
|
||||
copy /Y "%SRC_EXE%" "%BIN_PATH%" >nul
|
||||
if not "%ERRORLEVEL%"=="0" exit /b 1
|
||||
|
||||
set "BINPATH=\"%BIN_PATH%\" -listen %LISTEN% -token %TOKEN%"
|
||||
|
||||
sc.exe query "%SERVICE_NAME%" >nul 2>&1
|
||||
if "%ERRORLEVEL%"=="0" (
|
||||
echo Updating existing service...
|
||||
sc.exe stop "%SERVICE_NAME%" >nul 2>&1
|
||||
sc.exe config "%SERVICE_NAME%" start= auto binPath= "%BINPATH%" DisplayName= "%DISPLAY_NAME%" >nul
|
||||
) else (
|
||||
echo Creating service...
|
||||
sc.exe create "%SERVICE_NAME%" start= auto binPath= "%BINPATH%" DisplayName= "%DISPLAY_NAME%" >nul
|
||||
)
|
||||
|
||||
sc.exe start "%SERVICE_NAME%" >nul 2>&1
|
||||
|
||||
echo.
|
||||
echo Installed/updated %DISPLAY_NAME%.
|
||||
echo - Binary: %BIN_PATH%
|
||||
echo - Token: %TOKEN%
|
||||
echo - Listen: %LISTEN%
|
||||
endlocal
|
||||
exit /b 0
|
||||
Reference in New Issue
Block a user