JNC Windows

This commit is contained in:
joaquin.navajas
2026-05-11 07:56:47 +02:00
commit 7add14d06f
77 changed files with 42025 additions and 0 deletions
+130
View File
@@ -0,0 +1,130 @@
#Requires -Version 5.1
<#
.SYNOPSIS
Genera JNC-NetTools.exe con todas las dependencias (PyInstaller).
.DESCRIPTION
Crea/usa un venv, instala requirements-win.txt y PyInstaller, y construye el .exe.
.EXAMPLE
.\Build-Windows.ps1
#>
$ErrorActionPreference = "Stop"
$ProjectRoot = $PSScriptRoot
Set-Location $ProjectRoot
Write-Host "=== JNC-NetTools - Build Windows ===" -ForegroundColor Cyan
Write-Host ""
# Detectar Python (evitar stub de Microsoft Store; priorizar "py" o python real)
$pythonExe = $null
$usePyLauncher = $false
# Probar "py" primero (launcher de Python en Windows)
$pyCmd = Get-Command py -ErrorAction SilentlyContinue
if ($pyCmd) {
$pythonExe = "py"
$usePyLauncher = $true
}
if (-not $pythonExe) {
foreach ($name in @("python", "python3")) {
$c = Get-Command $name -ErrorAction SilentlyContinue
if ($c -and $c.Source -and $c.Source -notmatch "WindowsApps\\python") {
$pythonExe = $c.Source
break
}
}
}
# Si solo tenemos el stub de Microsoft Store, no sirve
if ($pythonExe -and $pythonExe -match "WindowsApps\\python") {
$pythonExe = $null
}
if (-not $pythonExe) {
Write-Host "ERROR: No se encontró Python instalado." -ForegroundColor Red
Write-Host " El 'python' de Microsoft Store no es suficiente. Instala Python 3.8+ desde:" -ForegroundColor Yellow
Write-Host " https://www.python.org/downloads/" -ForegroundColor White
Write-Host " Durante la instalación, marca: 'Add Python to PATH'." -ForegroundColor Yellow
exit 1
}
Write-Host "[1/5] Python: $pythonExe" -ForegroundColor Green
$venvPath = Join-Path $ProjectRoot "venv"
$venvPython = Join-Path $venvPath "Scripts\python.exe"
$venvPip = Join-Path $venvPath "Scripts\pip.exe"
$useVenv = $false
if (Test-Path $venvPython) {
Write-Host "[2/5] Usando entorno virtual existente: venv\" -ForegroundColor Green
$useVenv = $true
} else {
Write-Host "[2/5] Creando entorno virtual en venv\..." -ForegroundColor Yellow
$created = $false
if ($usePyLauncher) {
$null = & py -3 -m venv $venvPath 2>&1
if (Test-Path $venvPython) { $created = $true }
}
if (-not $created -and $pythonExe -ne "py" -and $pythonExe -notmatch "WindowsApps") {
$null = & $pythonExe -m venv $venvPath 2>&1
if (Test-Path $venvPython) { $created = $true }
}
if ($created) {
$useVenv = $true
} else {
Write-Host " Venv no disponible; usando Python del sistema." -ForegroundColor Yellow
$venvPython = $pythonExe
$venvPip = "pip"
if ($usePyLauncher) { $venvPip = "py -3 -m pip" }
}
}
# Instalar dependencias
Write-Host "[3/5] Instalando dependencias (requirements-win.txt + PyInstaller)..." -ForegroundColor Yellow
$reqPath = Join-Path $ProjectRoot "requirements-win.txt"
if ($useVenv) {
& $venvPip install --quiet --upgrade pip
& $venvPip install --quiet -r $reqPath
& $venvPip install --quiet pyinstaller
} else {
if ($usePyLauncher) {
& py -3 -m pip install --quiet --upgrade pip
& py -3 -m pip install --quiet -r $reqPath
& py -3 -m pip install --quiet pyinstaller
} else {
& $venvPython -m pip install --quiet --upgrade pip
& $venvPython -m pip install --quiet -r $reqPath
& $venvPython -m pip install --quiet pyinstaller
}
}
if ($LASTEXITCODE -ne 0) {
Write-Host "ERROR: Fallo al instalar dependencias." -ForegroundColor Red
exit 1
}
Write-Host " Dependencias instaladas." -ForegroundColor Green
# Limpiar y construir
Write-Host "[4/5] Construyendo ejecutable con PyInstaller (puede tardar unos minutos)..." -ForegroundColor Yellow
if ($useVenv) {
$venvPyinstaller = Join-Path $venvPath "Scripts\pyinstaller.exe"
& $venvPyinstaller --clean --noconfirm JNC-NetTools.spec
} else {
if ($usePyLauncher) { & py -3 -m PyInstaller --clean --noconfirm JNC-NetTools.spec }
else { & $venvPython -m PyInstaller --clean --noconfirm JNC-NetTools.spec }
}
if ($LASTEXITCODE -ne 0) {
Write-Host "ERROR: PyInstaller falló." -ForegroundColor Red
exit 1
}
$exePath = Join-Path $ProjectRoot "dist\JNC-NetTools.exe"
Write-Host "[5/5] Verificando salida..." -ForegroundColor Yellow
if (-not (Test-Path $exePath)) {
Write-Host "ERROR: No se generó dist\JNC-NetTools.exe" -ForegroundColor Red
exit 1
}
Write-Host ""
Write-Host "=== Listo ===" -ForegroundColor Cyan
Write-Host "Ejecutable: $exePath" -ForegroundColor Green
Write-Host ""
Write-Host "Para crear el instalador completo (Npcap + Nmap):" -ForegroundColor Gray
Write-Host " 1. Copia npcap-*.exe y nmap-*-win32.zip en installer\extras\" -ForegroundColor Gray
Write-Host " 2. Compila installer\installer.iss con Inno Setup" -ForegroundColor Gray
Write-Host ""