/
kochkatech
/
CorpGame
Обзор
Документация
Войти
/
kochkatech
/
CorpGame
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
1
CI/CD
Аналитика
master
scripts/fix-firewall.ps1
57 строк
3 KB
kochkareal
feat(devops): свод к одному процессу Node на SQLite, портативная сборка без Docker; аудит безопасности
06 авг 2026, 15:06
06 авг 2026, 15:06
3266bcd
Код
Авторство
О чём код?
# Чинит доступ к игре из локальной сети, если брандмауэр Windows его блокирует — # по любой из трёх причин: сохранённое "Отмена" в диалоге при первом запуске, активная # Wi-Fi сеть помечена как "Общедоступная", или правило добавлено политикой безопасности. # # Отдельный файл от start.bat специально: обычный запуск игры никогда не должен просить # прав администратора (это подрывает доверие к скачанному из интернета .bat-файлу). # Права нужны только здесь, и только если что-то действительно не работает. $ErrorActionPreference = 'Stop' [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 $OutputEncoding = [System.Text.Encoding]::UTF8 function Test-IsAdmin { $id = [Security.Principal.WindowsIdentity]::GetCurrent() $p = New-Object Security.Principal.WindowsPrincipal($id) return $p.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) } if (-not (Test-IsAdmin)) { Write-Host "Нужны права администратора — сейчас Windows покажет запрос на подтверждение." Start-Process -FilePath 'powershell' -Verb RunAs -ArgumentList @( '-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', "`"$PSCommandPath`"" ) exit 0 } $nodeExe = (Get-Command node -ErrorAction SilentlyContinue).Source if (-not $nodeExe -or -not (Test-Path $nodeExe)) { Write-Host "[ошибка] Не нашёл node.exe в PATH. Нечего разрешать в брандмауэре." Write-Host "Убедитесь, что Node.js установлен: https://nodejs.org/" Read-Host "Нажмите Enter, чтобы закрыть окно" exit 1 } $nodeExe = (Resolve-Path $nodeExe).Path Write-Host "Node.exe: $nodeExe" Write-Host "" $ruleName = 'CorpGame (Битва Корпораций)' Write-Host "Удаляю старые правила для этого node.exe (если есть)..." Get-NetFirewallRule -ErrorAction SilentlyContinue | Where-Object { $filter = $_ | Get-NetFirewallApplicationFilter -ErrorAction SilentlyContinue $filter -and $filter.Program -eq $nodeExe } | Remove-NetFirewallRule -ErrorAction SilentlyContinue Write-Host "Добавляю разрешающее правило для всех типов сетей (частная/общественная/домен)..." # Правило привязано к программе (node.exe), а не к конкретному порту: start.ps1 каждый раз # подбирает порт заново (80/8080/3000/3001 — какой свободен), и порт-ориентированное правило # пришлось бы пересоздавать при каждом запуске. New-NetFirewallRule -DisplayName $ruleName -Direction Inbound -Program $nodeExe ` -Protocol TCP -Action Allow -Profile Private, Public, Domain | Out-Null Write-Host "" Write-Host "Готово. Запустите игру заново через start.bat." Read-Host "Нажмите Enter, чтобы закрыть окно"