@echo off chcp 65001 >nul setlocal set "PROJECT_DIR=%~dp0" set "PID_FILE=%PROJECT_DIR%.run\spine-connector-windows.pid" set "CONNECTOR_ENTRY=%PROJECT_DIR%connector\spine-connector.mjs" set "CONNECTOR_PID=" if exist "%PID_FILE%" set /p CONNECTOR_PID=<"%PID_FILE%" powershell -NoProfile -Command ^ "$pidValue=0; [void][int]::TryParse($env:CONNECTOR_PID,[ref]$pidValue);" ^ "$process=if($pidValue -gt 0){Get-CimInstance Win32_Process -Filter ('ProcessId = ' + $pidValue) -ErrorAction SilentlyContinue};" ^ "if($null -eq $process){$listener=Get-NetTCPConnection -LocalPort 27843 -State Listen -ErrorAction SilentlyContinue | Select-Object -First 1; if($listener){$process=Get-CimInstance Win32_Process -Filter ('ProcessId = ' + $listener.OwningProcess) -ErrorAction SilentlyContinue}};" ^ "if($null -eq $process){exit 2};" ^ "$expected=$env:CONNECTOR_ENTRY;" ^ "if((-not $process.CommandLine) -or $process.CommandLine.IndexOf($expected,[StringComparison]::OrdinalIgnoreCase) -lt 0){exit 3};" ^ "Stop-Process -Id $process.ProcessId -Force -ErrorAction Stop" set "STOP_RESULT=%ERRORLEVEL%" if "%STOP_RESULT%"=="0" ( del /q "%PID_FILE%" >nul 2>&1 echo Spine粒子连接器已停止。 timeout /t 1 /nobreak >nul exit /b 0 ) if "%STOP_RESULT%"=="2" ( del /q "%PID_FILE%" >nul 2>&1 echo Spine粒子连接器已经停止。 timeout /t 1 /nobreak >nul exit /b 0 ) if "%STOP_RESULT%"=="3" ( echo 27843 端口对应的进程不属于当前项目,为避免误关,本次未执行停止。 timeout /t 1 /nobreak >nul exit /b 1 ) echo 停止 Spine粒子连接器失败,请检查 PowerShell 权限或手动结束对应进程。 timeout /t 1 /nobreak >nul exit /b 1