feat: Implementação completa do NoIdle - Cliente, Backend e Scripts
- Cliente Windows com modo silencioso e auto-start robusto - Backend Node.js + API REST - Frontend Next.js + Dashboard - Scripts PowerShell de configuração e diagnóstico - Documentação completa - Build scripts para Windows e Linux - Solução de auto-start após reinicialização Resolução do problema: Cliente não voltava ativo após reboot Solução: Registro do Windows + Task Scheduler + Modo silencioso
This commit is contained in:
236
BUILD_NOIDLE.ps1
Normal file
236
BUILD_NOIDLE.ps1
Normal file
@@ -0,0 +1,236 @@
|
||||
# Script Automatizado para Compilar NoIdle
|
||||
# Execute no Windows com PowerShell
|
||||
|
||||
param(
|
||||
[switch]$Clean,
|
||||
[switch]$Test,
|
||||
[string]$Icon = ""
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
Write-Host "NoIdle - Build Script" -ForegroundColor Cyan
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
# Verificar se está no Windows
|
||||
if ($PSVersionTable.Platform -eq "Unix") {
|
||||
Write-Host "❌ Este script deve ser executado no Windows!" -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Verificar Python
|
||||
Write-Host "[1/6] Verificando Python..." -ForegroundColor Yellow
|
||||
try {
|
||||
$pythonVersion = python --version 2>&1
|
||||
Write-Host " ✅ Python encontrado: $pythonVersion" -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Host " ❌ Python não encontrado!" -ForegroundColor Red
|
||||
Write-Host " Instale Python 3.8+ de: https://www.python.org/downloads/" -ForegroundColor Yellow
|
||||
exit 1
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
# Verificar arquivo fonte
|
||||
Write-Host "[2/6] Verificando arquivo fonte..." -ForegroundColor Yellow
|
||||
$sourceFile = "CLIENTE_CORRIGIDO.py"
|
||||
if (-not (Test-Path $sourceFile)) {
|
||||
Write-Host " ❌ Arquivo não encontrado: $sourceFile" -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
Write-Host " ✅ Arquivo encontrado: $sourceFile" -ForegroundColor Green
|
||||
$fileSize = (Get-Item $sourceFile).Length
|
||||
Write-Host " Tamanho: $([math]::Round($fileSize / 1KB, 2)) KB" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
|
||||
# Limpar builds anteriores se solicitado
|
||||
if ($Clean) {
|
||||
Write-Host "[CLEAN] Limpando builds anteriores..." -ForegroundColor Yellow
|
||||
Remove-Item -Path "build" -Recurse -Force -ErrorAction SilentlyContinue
|
||||
Remove-Item -Path "dist" -Recurse -Force -ErrorAction SilentlyContinue
|
||||
Remove-Item -Path "*.spec" -Force -ErrorAction SilentlyContinue
|
||||
Write-Host " ✅ Diretórios limpos" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
# Instalar/Atualizar dependências
|
||||
Write-Host "[3/6] Instalando dependências..." -ForegroundColor Yellow
|
||||
$dependencies = @(
|
||||
"pyinstaller",
|
||||
"pywin32",
|
||||
"psutil",
|
||||
"requests",
|
||||
"pystray",
|
||||
"pillow",
|
||||
"schedule"
|
||||
)
|
||||
|
||||
foreach ($dep in $dependencies) {
|
||||
Write-Host " Instalando $dep..." -ForegroundColor Gray
|
||||
try {
|
||||
python -m pip install --quiet --upgrade $dep
|
||||
} catch {
|
||||
Write-Host " ⚠️ Erro ao instalar $dep" -ForegroundColor Yellow
|
||||
}
|
||||
}
|
||||
Write-Host " ✅ Dependências instaladas" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
# Compilar
|
||||
Write-Host "[4/6] Compilando NoIdle.exe..." -ForegroundColor Yellow
|
||||
Write-Host " Isso pode demorar alguns minutos..." -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
|
||||
$buildCommand = "pyinstaller --onefile --windowed --name NoIdle"
|
||||
|
||||
# Adicionar ícone se fornecido
|
||||
if ($Icon -and (Test-Path $Icon)) {
|
||||
$buildCommand += " --icon=`"$Icon`""
|
||||
Write-Host " Usando ícone: $Icon" -ForegroundColor Cyan
|
||||
}
|
||||
|
||||
$buildCommand += " $sourceFile"
|
||||
|
||||
try {
|
||||
Invoke-Expression $buildCommand | Out-Null
|
||||
Write-Host " ✅ Compilação concluída!" -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Host " ❌ Erro na compilação!" -ForegroundColor Red
|
||||
Write-Host " $_" -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
# Verificar resultado
|
||||
Write-Host "[5/6] Verificando executável..." -ForegroundColor Yellow
|
||||
$exePath = "dist\NoIdle.exe"
|
||||
|
||||
if (Test-Path $exePath) {
|
||||
$exeInfo = Get-Item $exePath
|
||||
Write-Host " ✅ Executável criado com sucesso!" -ForegroundColor Green
|
||||
Write-Host " Localização: $exePath" -ForegroundColor Cyan
|
||||
Write-Host " Tamanho: $([math]::Round($exeInfo.Length / 1MB, 2)) MB" -ForegroundColor Cyan
|
||||
Write-Host " Data: $($exeInfo.LastWriteTime)" -ForegroundColor Gray
|
||||
} else {
|
||||
Write-Host " ❌ Executável não foi criado!" -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
# Testar se solicitado
|
||||
if ($Test) {
|
||||
Write-Host "[6/6] Testando executável..." -ForegroundColor Yellow
|
||||
|
||||
# Teste 1: Verificar se executa
|
||||
Write-Host " Teste 1: Iniciar e parar processo..." -ForegroundColor Gray
|
||||
try {
|
||||
$process = Start-Process -FilePath $exePath -ArgumentList "--silent" -PassThru -WindowStyle Hidden
|
||||
Start-Sleep -Seconds 3
|
||||
|
||||
$running = Get-Process -Id $process.Id -ErrorAction SilentlyContinue
|
||||
if ($running) {
|
||||
Write-Host " ✅ Processo iniciou corretamente" -ForegroundColor Green
|
||||
Stop-Process -Id $process.Id -Force
|
||||
} else {
|
||||
Write-Host " ⚠️ Processo não está rodando" -ForegroundColor Yellow
|
||||
}
|
||||
} catch {
|
||||
Write-Host " ⚠️ Erro ao testar: $_" -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
# Teste 2: Verificar tamanho
|
||||
Write-Host " Teste 2: Verificar tamanho..." -ForegroundColor Gray
|
||||
$sizeInMB = [math]::Round($exeInfo.Length / 1MB, 2)
|
||||
if ($sizeInMB -lt 50) {
|
||||
Write-Host " ✅ Tamanho OK ($sizeInMB MB)" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host " ⚠️ Tamanho grande ($sizeInMB MB)" -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
# Resumo final
|
||||
Write-Host "========================================" -ForegroundColor Green
|
||||
Write-Host "✅ BUILD CONCLUÍDO COM SUCESSO!" -ForegroundColor Green
|
||||
Write-Host "========================================" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
Write-Host "📦 Executável: $exePath" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "📋 Próximos passos:" -ForegroundColor Yellow
|
||||
Write-Host " 1. Teste o executável em uma máquina limpa" -ForegroundColor White
|
||||
Write-Host " 2. Execute: .\dist\NoIdle.exe --silent" -ForegroundColor Gray
|
||||
Write-Host " 3. Verifique se o processo está rodando:" -ForegroundColor White
|
||||
Write-Host " Get-Process -Name 'NoIdle'" -ForegroundColor Gray
|
||||
Write-Host " 4. Distribua junto com os scripts de configuração" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host "📄 Arquivos para distribuir:" -ForegroundColor Yellow
|
||||
Write-Host " - dist\NoIdle.exe" -ForegroundColor White
|
||||
Write-Host " - CONFIGURAR_AUTOSTART_NOIDLE.ps1" -ForegroundColor White
|
||||
Write-Host " - VERIFICAR_E_CORRIGIR_NOIDLE.ps1" -ForegroundColor White
|
||||
Write-Host " - GUIA_RAPIDO_AUTOSTART.md" -ForegroundColor White
|
||||
Write-Host ""
|
||||
|
||||
# Oferecer criar pacote de distribuição
|
||||
$criarPacote = Read-Host "Deseja criar um pacote ZIP para distribuição? (S/N)"
|
||||
if ($criarPacote -eq "S" -or $criarPacote -eq "s") {
|
||||
Write-Host ""
|
||||
Write-Host "Criando pacote de distribuição..." -ForegroundColor Cyan
|
||||
|
||||
$packageDir = "NoIdle-Package"
|
||||
$zipFile = "NoIdle-v1.0.zip"
|
||||
|
||||
# Criar diretório temporário
|
||||
New-Item -ItemType Directory -Path $packageDir -Force | Out-Null
|
||||
|
||||
# Copiar arquivos
|
||||
Copy-Item -Path $exePath -Destination $packageDir
|
||||
Copy-Item -Path "CONFIGURAR_AUTOSTART_NOIDLE.ps1" -Destination $packageDir -ErrorAction SilentlyContinue
|
||||
Copy-Item -Path "VERIFICAR_E_CORRIGIR_NOIDLE.ps1" -Destination $packageDir -ErrorAction SilentlyContinue
|
||||
Copy-Item -Path "GUIA_RAPIDO_AUTOSTART.md" -Destination $packageDir -ErrorAction SilentlyContinue
|
||||
Copy-Item -Path "LEIA_PRIMEIRO.md" -Destination $packageDir -ErrorAction SilentlyContinue
|
||||
|
||||
# Criar README para o pacote
|
||||
$readmeContent = @"
|
||||
# NoIdle - Pacote de Instalação v1.0
|
||||
|
||||
## Conteúdo:
|
||||
- NoIdle.exe - Cliente principal
|
||||
- CONFIGURAR_AUTOSTART_NOIDLE.ps1 - Script de configuração
|
||||
- VERIFICAR_E_CORRIGIR_NOIDLE.ps1 - Script de diagnóstico
|
||||
- GUIA_RAPIDO_AUTOSTART.md - Guia do usuário
|
||||
- LEIA_PRIMEIRO.md - Documentação completa
|
||||
|
||||
## Instalação Rápida:
|
||||
|
||||
1. Execute NoIdle.exe
|
||||
2. Insira a chave de ativação
|
||||
3. Reinicie o computador
|
||||
4. O NoIdle iniciará automaticamente!
|
||||
|
||||
## Resolver Problemas:
|
||||
|
||||
Se não iniciar automaticamente após reiniciar:
|
||||
1. Execute: VERIFICAR_E_CORRIGIR_NOIDLE.ps1 -AutoFix
|
||||
2. Reinicie novamente
|
||||
|
||||
## Suporte:
|
||||
Leia LEIA_PRIMEIRO.md para mais informações.
|
||||
"@
|
||||
|
||||
$readmeContent | Out-File -FilePath "$packageDir\README.txt" -Encoding UTF8
|
||||
|
||||
# Criar ZIP
|
||||
Compress-Archive -Path $packageDir\* -DestinationPath $zipFile -Force
|
||||
|
||||
# Limpar diretório temporário
|
||||
Remove-Item -Path $packageDir -Recurse -Force
|
||||
|
||||
Write-Host "✅ Pacote criado: $zipFile" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
Write-Host "Pronto! 🚀" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
Reference in New Issue
Block a user