577 lines
18 KiB
PowerShell
577 lines
18 KiB
PowerShell
|
|
function Initialize-SystemConfiguration {
|
|
Write-Log "`nSetting High Performance power plan..."
|
|
Set-HighPerformancePowerPlan
|
|
|
|
Write-Log "`nRenaming computer..."
|
|
Rename-PCToMac
|
|
|
|
Write-Log "`nDisabling UAC and notifications..."
|
|
Disable-UACAndNotifications
|
|
|
|
Write-Log "`nSetting main connection as PRIVATE..."
|
|
Get-NetConnectionProfile |
|
|
Where-Object { $_.InterfaceAlias -like "*Ethernet*" } |
|
|
Set-NetConnectionProfile -NetworkCategory Private
|
|
|
|
Write-Log "`nAdjusting System Time..."
|
|
try {
|
|
Set-Service w32time -StartupType Automatic -ErrorAction SilentlyContinue
|
|
Start-Service w32time -ErrorAction SilentlyContinue
|
|
w32tm /resync /force | Out-Null
|
|
Write-Log "System time synchronized."
|
|
}
|
|
catch {
|
|
Write-Log "Could not synchronize system time: $_"
|
|
}
|
|
}
|
|
|
|
|
|
Add-Type -AssemblyName System.Windows.Forms
|
|
[System.Windows.Forms.Application]::EnableVisualStyles()
|
|
|
|
# ===== Configurações de versão Maio2026 =====
|
|
$VersionDual = "2026.05.21.2"
|
|
$VersionDualR = "2026.05.21.2"
|
|
$VersionBotoneira = "2026.01.13.1"
|
|
$ReleaseBaseUrl = "https://ndlabversions.pilotgamingsys.com/devel"
|
|
|
|
# Verify Admin Rights
|
|
if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(
|
|
[Security.Principal.WindowsBuiltInRole]::Administrator)) {
|
|
[System.Windows.Forms.MessageBox]::Show("Restarting as Administrator...")
|
|
Start-Process powershell "-ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
|
|
exit
|
|
}
|
|
|
|
function Write-Log {
|
|
param ($text)
|
|
$outputBox.AppendText("$text`r`n")
|
|
$outputBox.ScrollToCaret()
|
|
}
|
|
|
|
function Stop-Unity {
|
|
Write-Log "Stopping unity.exe and cabinet.exe if running..."
|
|
try {
|
|
Stop-Process -Name "unity" -Force -ErrorAction Stop
|
|
Write-Log "unity.exe process stopped."
|
|
} catch {
|
|
Write-Log "unity.exe was not running or could not be stopped."
|
|
}
|
|
|
|
try {
|
|
Stop-Process -Name "cabinet" -Force -ErrorAction Stop
|
|
Write-Log "cabinet.exe process stopped."
|
|
} catch {
|
|
Write-Log "cabinet.exe was not running or could not be stopped."
|
|
}
|
|
}
|
|
|
|
function Update-StartBat {
|
|
param ([string]$Mode)
|
|
|
|
$batPath = "C:\pilotgames\start.bat"
|
|
|
|
if ($Mode -eq "Portrait") {
|
|
$content = @"
|
|
cd /D C:\pilotgames\NDGDRelease
|
|
powershell -command "Start-Process cabinet.exe -Verb runas -ArgumentList '-screen-height', '1920', '-screen-width','1080', '-screen-fullscreen', '0', '-popupwindow'"
|
|
"@
|
|
}
|
|
else {
|
|
$content = @"
|
|
cd /D C:\pilotgames\BRGDRelease
|
|
powershell -command "Start-Process cabinet.exe -Verb runas -ArgumentList '-screen-height', '1080', '-screen-width','1920', '-screen-fullscreen', '0', '-popupwindow'"
|
|
"@
|
|
}
|
|
|
|
Write-Log "Updating start.bat for $Mode..."
|
|
Set-Content -Path $batPath -Value $content -Force -Encoding ASCII
|
|
Write-Log "start.bat updated."
|
|
}
|
|
|
|
function Get-ModeVersion {
|
|
param ([string]$Mode)
|
|
|
|
switch ($Mode) {
|
|
"Dual" { return $VersionDual }
|
|
"DualR" { return $VersionDualR }
|
|
"Botoneira" { return $VersionBotoneira }
|
|
default { throw "Unknown mode: $Mode" }
|
|
}
|
|
}
|
|
|
|
function Get-ModeOrientation {
|
|
param ([string]$Mode)
|
|
|
|
switch ($Mode) {
|
|
"Dual" { return "Dual" }
|
|
"DualR" { return "Dual" }
|
|
"Botoneira" { return "Portrait" }
|
|
default { throw "Unknown mode: $Mode" }
|
|
}
|
|
}
|
|
|
|
function Get-ModeDisplayName {
|
|
param ([string]$Mode)
|
|
|
|
switch ($Mode) {
|
|
"Portrait" { return "Portrait CabTab" }
|
|
"Dual" { return "Dual" }
|
|
"DualR" { return "Dual Rua" }
|
|
"Botoneira" { return "Botoneira" }
|
|
default { return $Mode }
|
|
}
|
|
}
|
|
|
|
function Download-ReleaseZip {
|
|
param (
|
|
[string]$Version
|
|
)
|
|
|
|
$downloadsPath = "C:\pilotgames\downloads"
|
|
|
|
if (-not (Test-Path $downloadsPath)) {
|
|
New-Item -ItemType Directory -Path $downloadsPath -Force | Out-Null
|
|
}
|
|
|
|
# Verifica primeiro se a release já existe localmente
|
|
$localFiles = @(
|
|
(Join-Path $downloadsPath "NDGDRelease-$Version.zip"),
|
|
(Join-Path $downloadsPath "BRGDRelease-$Version.zip")
|
|
)
|
|
|
|
foreach ($file in $localFiles) {
|
|
if (Test-Path $file) {
|
|
Write-Log "Release encontrada localmente:"
|
|
Write-Log $file
|
|
Write-Log "Download ignorado."
|
|
return $file
|
|
}
|
|
}
|
|
|
|
# Não encontrou localmente, determina qual arquivo baixar
|
|
if ($ReleaseBaseUrl -match "br") {
|
|
$zipFileName = "BRGDRelease-$Version.zip"
|
|
}
|
|
else {
|
|
$zipFileName = "NDGDRelease-$Version.zip"
|
|
}
|
|
|
|
$zipUrl = "$ReleaseBaseUrl/$zipFileName"
|
|
$zipDest = Join-Path $downloadsPath $zipFileName
|
|
|
|
Write-Log "Downloading release package..."
|
|
Write-Log "URL: $zipUrl"
|
|
|
|
try {
|
|
Invoke-WebRequest -Uri $zipUrl -OutFile $zipDest -UseBasicParsing
|
|
Write-Log "Download completed: $zipDest"
|
|
return $zipDest
|
|
}
|
|
catch {
|
|
throw "Failed to download file from $zipUrl. $_"
|
|
}
|
|
}
|
|
|
|
function Install-Pilot {
|
|
param ([string]$Mode)
|
|
|
|
$outputBox.Clear()
|
|
|
|
$displayMode = Get-ModeDisplayName -Mode $Mode
|
|
Write-Log "Starting $displayMode installation..."
|
|
|
|
$version = Get-ModeVersion -Mode $Mode
|
|
$orient = Get-ModeOrientation -Mode $Mode
|
|
|
|
Write-Log "Selected mode: $displayMode"
|
|
Write-Log "Selected version: $version"
|
|
Write-Log "Selected orientation: $orient"
|
|
|
|
Write-Log "`nRenaming PC using MAC address..."
|
|
$mac = (Get-NetAdapter -InterfaceAlias "*Ethernet*" | Select-Object -First 1 -ExpandProperty MacAddress) -replace '-', ''
|
|
if ($mac) {
|
|
Rename-Computer -NewName "$mac" -Force
|
|
Write-Log "Computer renamed to: $mac"
|
|
Write-Log "Please restart the computer to apply the change.`n"
|
|
} else {
|
|
Write-Log "Could not retrieve MAC address.`n"
|
|
}
|
|
|
|
Write-Log "`nSetting main connection as PRIVATE..."
|
|
Get-NetConnectionProfile | Where-Object { $_.InterfaceAlias -like "*Ethernet*" } | Set-NetConnectionProfile -NetworkCategory Private
|
|
|
|
Write-Log "`nAdjusting System Time..."
|
|
try {
|
|
Set-Service w32time -StartupType Automatic -ErrorAction SilentlyContinue
|
|
Start-Service w32time -ErrorAction SilentlyContinue
|
|
w32tm /resync /force | Out-Null
|
|
Write-Log "System time synchronized."
|
|
} catch {
|
|
Write-Log "Could not synchronize system time: $_"
|
|
}
|
|
|
|
Write-Log "Stopping PilotGameAgent service..."
|
|
Stop-Service -Name "PilotGameAgent" -Force -ErrorAction SilentlyContinue
|
|
|
|
Stop-Unity
|
|
|
|
Push-Location "C:\pilotgames"
|
|
|
|
try {
|
|
#Write-Log "Clearing downloads folder..."
|
|
#Remove-Item -Path "C:\pilotgames\downloads\*" -Force -Recurse -ErrorAction SilentlyContinue
|
|
|
|
Write-Log "Removing backup folders..."
|
|
Remove-Item -Path "C:\pilotgames\BRGDRelease.bak" -Recurse -Force -ErrorAction SilentlyContinue
|
|
Remove-Item -Path "C:\pilotgames\NDGDRelease.bak" -Recurse -Force -ErrorAction SilentlyContinue
|
|
|
|
Write-Log "Waiting 10 seconds..."
|
|
Start-Sleep -Seconds 10
|
|
|
|
if (Test-Path "C:\pilotgames\BRGDRelease") {
|
|
Write-Log "Backing up BRGDRelease folder..."
|
|
Move-Item "C:\pilotgames\BRGDRelease" "C:\pilotgames\BRGDRelease.bak" -Force -ErrorAction SilentlyContinue
|
|
}
|
|
|
|
if (Test-Path "C:\pilotgames\NDGDRelease") {
|
|
Write-Log "Backing up NDGDRelease folder..."
|
|
Move-Item "C:\pilotgames\NDGDRelease" "C:\pilotgames\NDGDRelease.bak" -Force -ErrorAction SilentlyContinue
|
|
}
|
|
|
|
$zipPath = Download-ReleaseZip -Version $version
|
|
|
|
Write-Log "Unzipping file into C:\pilotgames..."
|
|
Add-Type -AssemblyName System.IO.Compression.FileSystem
|
|
[System.IO.Compression.ZipFile]::ExtractToDirectory($zipPath, "C:\pilotgames")
|
|
|
|
Update-StartBat -Mode $orient
|
|
|
|
Write-Log "Waiting 20 seconds..."
|
|
Start-Sleep -Seconds 20
|
|
|
|
Write-Log "Starting PilotGameAgent service..."
|
|
Set-Service -Name "PilotGameAgent" -StartupType Automatic -PassThru | Out-Null
|
|
Start-Service -Name "PilotGameAgent"
|
|
|
|
Write-Log "$displayMode installation completed successfully."
|
|
}
|
|
catch {
|
|
Write-Log "Installation error: $_"
|
|
}
|
|
finally {
|
|
Pop-Location
|
|
}
|
|
}
|
|
|
|
function Set-HighPerformancePowerPlan {
|
|
Write-Log "`nActivating High Performance power plan..."
|
|
$highPerf = powercfg -l | Where-Object { $_ -match "High performance" -or $_ -match "Alto desempenho" }
|
|
if ($highPerf) {
|
|
$guid = ($highPerf -split '\s+')[3]
|
|
powercfg -setactive $guid
|
|
|
|
powercfg -change -monitor-timeout-ac 0
|
|
powercfg -change -monitor-timeout-dc 0
|
|
powercfg -change -standby-timeout-ac 0
|
|
powercfg -change -standby-timeout-dc 0
|
|
powercfg -change -disk-timeout-ac 0
|
|
powercfg -change -disk-timeout-dc 0
|
|
|
|
Write-Log "Power settings applied successfully.`n"
|
|
} else {
|
|
Write-Log "High Performance power plan not found.`n"
|
|
}
|
|
}
|
|
|
|
function Rename-PCToMac {
|
|
Write-Log "`nRenaming PC using MAC address..."
|
|
$mac = (Get-NetAdapter -InterfaceAlias "*Ethernet*" | Select-Object -First 1 -ExpandProperty MacAddress) -replace '-', ''
|
|
if ($mac) {
|
|
Rename-Computer -NewName "$mac" -Force
|
|
Write-Log "Computer renamed to: $mac"
|
|
Write-Log "Please restart the computer to apply the change.`n"
|
|
} else {
|
|
Write-Log "Could not retrieve MAC address.`n"
|
|
}
|
|
}
|
|
|
|
function Install-CommonTools {
|
|
Write-Log "`nInstalling tools and dependencies via winget..."
|
|
try {
|
|
winget install -e --id Notepad++.Notepad++ --accept-source-agreements --accept-package-agreements
|
|
winget install -e --id Microsoft.DotNet.DesktopRuntime.8 --accept-source-agreements --accept-package-agreements
|
|
winget install -e --id Microsoft.VCRedist.2015+.x64 --accept-source-agreements --accept-package-agreements
|
|
Write-Log "Installation completed.`n"
|
|
} catch {
|
|
Write-Log "Installation error: $_"
|
|
}
|
|
}
|
|
|
|
function Disable-UACAndNotifications {
|
|
Write-Log "`nDisabling UAC and notifications..."
|
|
try {
|
|
Set-ItemProperty -Path REGISTRY::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLUA -Value 0
|
|
Set-ItemProperty -Path REGISTRY::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System -Name ConsentPromptBehaviorAdmin -Value 0
|
|
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows Defender Security Center\Notifications" -Force | Out-Null
|
|
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows Defender Security Center\Notifications" -Name "DisableEnhancedNotifications" -Type DWord -Value 1
|
|
Set-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Search -Name SearchBoxTaskbarMode -Value 0 -Type DWord -Force
|
|
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
|
|
Write-Log "UAC and notifications disabled.`n"
|
|
} catch {
|
|
Write-Log "Error while configuring system: $_"
|
|
}
|
|
}
|
|
|
|
function Upgrade-PortraitCabTab {
|
|
|
|
$OriginalLocation = Get-Location
|
|
|
|
$CabTabPath = "C:\PilotDownloads\CabTabInstall"
|
|
$PilotPath = "C:\pilotgames"
|
|
$DownloadsPath = Join-Path $PilotPath "downloads"
|
|
|
|
function Invoke-Step {
|
|
|
|
param(
|
|
[string]$Description,
|
|
[scriptblock]$Command
|
|
)
|
|
|
|
Write-Log ""
|
|
Write-Log "========================================"
|
|
Write-Log $Description
|
|
|
|
try {
|
|
|
|
& $Command
|
|
|
|
Write-Log "[ OK ] $Description"
|
|
|
|
}
|
|
catch {
|
|
|
|
Write-Log "[ERRO] $Description"
|
|
Write-Log $_
|
|
|
|
throw
|
|
|
|
}
|
|
|
|
}
|
|
|
|
try {
|
|
|
|
Initialize-SystemConfiguration
|
|
|
|
foreach ($Path in @($CabTabPath,$PilotPath,$DownloadsPath)) {
|
|
|
|
if (!(Test-Path $Path)) {
|
|
throw "Pasta não encontrada: $Path"
|
|
}
|
|
|
|
}
|
|
|
|
Set-Location $CabTabPath
|
|
Write-Log "Diretório atual: $(Get-Location)"
|
|
|
|
Invoke-Step "Copiando credentials.dat" {
|
|
Copy-Item ".\credentials.dat" $PilotPath -Force
|
|
}
|
|
|
|
Invoke-Step "Copiando deployAgent.bat" {
|
|
Copy-Item ".\deployAgent.bat" $PilotPath -Force
|
|
}
|
|
|
|
Invoke-Step "Copiando deployCabinet.bat" {
|
|
Copy-Item ".\deployCabinet.bat" $PilotPath -Force
|
|
}
|
|
|
|
Invoke-Step "Copiando site_director.cfg" {
|
|
Copy-Item ".\site_director.cfg" $PilotPath -Force
|
|
}
|
|
|
|
Invoke-Step "Copiando start.bat" {
|
|
Copy-Item ".\start.bat" $PilotPath -Force
|
|
}
|
|
|
|
Invoke-Step "Copiando InstallGameAgentService.bat" {
|
|
Copy-Item ".\InstallGameAgentService.bat" $PilotPath -Force
|
|
}
|
|
|
|
Invoke-Step "Copiando OHGDRelease" {
|
|
Copy-Item ".\OHGDRelease-2026.05.07.1.zip" $DownloadsPath -Force
|
|
}
|
|
|
|
Invoke-Step "Copiando PilotGameAgentRelease" {
|
|
Copy-Item ".\PilotGameAgentRelease-2026.6.2.1.zip" $DownloadsPath -Force
|
|
}
|
|
|
|
Invoke-Step "Importando configurações do registro" {
|
|
reg import "PG Settings.reg"
|
|
}
|
|
|
|
Invoke-Step "Instalando .NET Desktop Runtime" {
|
|
|
|
$proc = Start-Process `
|
|
".\windowsdesktop-runtime-8.0.15-win-x64.exe" `
|
|
-ArgumentList "/quiet /norestart" `
|
|
-Wait `
|
|
-PassThru
|
|
|
|
if ($proc.ExitCode -ne 0) {
|
|
throw "Instalação do Runtime retornou ExitCode $($proc.ExitCode)"
|
|
}
|
|
|
|
}
|
|
|
|
Set-Location $PilotPath
|
|
|
|
Invoke-Step "Removendo C:\pilot" {
|
|
Remove-Item "C:\pilot" -Recurse -Force -ErrorAction SilentlyContinue
|
|
}
|
|
|
|
Invoke-Step "Parando serviço PilotGameAgent" {
|
|
Stop-Service PilotGameAgent -ErrorAction SilentlyContinue
|
|
}
|
|
|
|
Invoke-Step "Removendo serviço PilotGameAgent" {
|
|
sc.exe delete PilotGameAgent | Out-Null
|
|
}
|
|
|
|
Invoke-Step "Renomeando game_agent" {
|
|
|
|
if (Test-Path ".\game_agent.ND") {
|
|
Remove-Item ".\game_agent.ND" -Recurse -Force
|
|
}
|
|
|
|
if (Test-Path ".\game_agent") {
|
|
Rename-Item ".\game_agent" "game_agent.ND"
|
|
}
|
|
|
|
}
|
|
|
|
Invoke-Step "Criando novo diretório game_agent" {
|
|
New-Item ".\game_agent" -ItemType Directory -Force | Out-Null
|
|
}
|
|
|
|
Invoke-Step "Executando deployAgent" {
|
|
& ".\deployAgent.bat" "2026.6.2.1"
|
|
}
|
|
|
|
Invoke-Step "Instalando serviço PilotGameAgent" {
|
|
& ".\InstallGameAgentService.bat"
|
|
}
|
|
|
|
Invoke-Step "Configurando serviço para Automático" {
|
|
Set-Service PilotGameAgent -StartupType Automatic
|
|
}
|
|
|
|
Invoke-Step "Limpando arquivos antigos" {
|
|
|
|
Remove-Item ".\NDGDRelease*.zip" -Force -ErrorAction SilentlyContinue
|
|
Remove-Item ".\NDGDRelease.bak" -Recurse -Force -ErrorAction SilentlyContinue
|
|
Remove-Item ".\BRGDRelease.bak" -Recurse -Force -ErrorAction SilentlyContinue
|
|
|
|
}
|
|
|
|
Invoke-Step "Criando backup das releases" {
|
|
|
|
if (Test-Path ".\NDGDRelease") {
|
|
Move-Item ".\NDGDRelease" ".\NDGDRelease.bak"
|
|
}
|
|
|
|
if (Test-Path ".\BRGDRelease") {
|
|
Move-Item ".\BRGDRelease" ".\BRGDRelease.bak"
|
|
}
|
|
|
|
}
|
|
|
|
Invoke-Step "Executando deployCabinet" {
|
|
& ".\deployCabinet.bat" "2026.05.07.1"
|
|
}
|
|
|
|
Invoke-Step "Reiniciando Explorer" {
|
|
taskkill /IM explorer.exe /F | Out-Null
|
|
}
|
|
|
|
Invoke-Step "Iniciando serviço PilotGameAgent" {
|
|
Start-Service PilotGameAgent
|
|
}
|
|
|
|
Write-Log ""
|
|
Write-Log "========================================"
|
|
Write-Log "Upgrade Portrait CabTab concluído com sucesso."
|
|
Write-Log "========================================"
|
|
|
|
}
|
|
catch {
|
|
|
|
Write-Log ""
|
|
Write-Log "========================================"
|
|
Write-Log "FALHA DURANTE O UPGRADE"
|
|
Write-Log $_
|
|
Write-Log "========================================"
|
|
|
|
throw
|
|
|
|
}
|
|
finally {
|
|
|
|
Set-Location $OriginalLocation
|
|
|
|
}
|
|
|
|
}
|
|
|
|
# GUI
|
|
$form = New-Object System.Windows.Forms.Form
|
|
$form.Text = "Pilot Installer"
|
|
$form.Size = New-Object System.Drawing.Size(820, 560)
|
|
$form.StartPosition = "CenterScreen"
|
|
|
|
$buttonsPanel = New-Object System.Windows.Forms.FlowLayoutPanel
|
|
$buttonsPanel.Location = New-Object System.Drawing.Point(10, 10)
|
|
$buttonsPanel.Size = New-Object System.Drawing.Size(780, 80)
|
|
$buttonsPanel.AutoSize = $false
|
|
$buttonsPanel.WrapContents = $true
|
|
$buttonsPanel.FlowDirection = [System.Windows.Forms.FlowDirection]::LeftToRight
|
|
$buttonsPanel.Padding = New-Object System.Windows.Forms.Padding(0)
|
|
$buttonsPanel.Margin = New-Object System.Windows.Forms.Padding(0)
|
|
|
|
$form.Controls.Add($buttonsPanel)
|
|
|
|
$buttons = @(
|
|
@{ Text = "Install Portrait CabTab"; Action = { Initialize-SystemConfiguration; Upgrade-PortraitCabTab } },
|
|
@{ Text = "Install Dual"; Action = { Initialize-SystemConfiguration; Install-Pilot -Mode "Dual" } },
|
|
@{ Text = "Install Dual Rua"; Action = { Initialize-SystemConfiguration; Install-Pilot -Mode "DualR" } },
|
|
@{ Text = "Install Botoneira"; Action = { Initialize-SystemConfiguration; Install-Pilot -Mode "Botoneira" } },
|
|
@{ Text = "Exit"; Action = { $form.Close() } }
|
|
)
|
|
|
|
foreach ($btn in $buttons) {
|
|
$button = New-Object System.Windows.Forms.Button
|
|
$button.Text = $btn.Text
|
|
$button.Size = New-Object System.Drawing.Size(180, 30)
|
|
$button.Margin = New-Object System.Windows.Forms.Padding(5)
|
|
$button.Add_Click($btn.Action)
|
|
$buttonsPanel.Controls.Add($button)
|
|
}
|
|
|
|
$outputBox = New-Object System.Windows.Forms.TextBox
|
|
$outputBox.Multiline = $true
|
|
$outputBox.ScrollBars = "Vertical"
|
|
$outputBox.ReadOnly = $true
|
|
$outputBox.Size = New-Object System.Drawing.Size(780, 420)
|
|
$outputBox.Location = New-Object System.Drawing.Point(10, 100)
|
|
$outputBox.Font = New-Object System.Drawing.Font("Consolas",10)
|
|
$outputBox.Name = "OutputTextBox"
|
|
|
|
$form.Controls.Add($outputBox)
|
|
$form.Topmost = $true
|
|
$form.ShowDialog()
|
|
|
|
|
|
|