# Diagnóstico y Solución - Error 411 en otra PC

## 🔍 ¿Por qué funciona en tu PC pero no en otra?

El error 411 "Length Required" ocurre cuando el servicio `DigitalPersonaServiceDirect.exe` **no se inicia correctamente** en la otra PC. Esto impide que la aplicación se comunique con el servicio biométrico.

---

## ✅ Requisitos del Sistema

### 1. .NET Framework 4.5 o superior
Tu servicio requiere **.NET Framework 4.5** instalado.

**Verificar si está instalado:**
- Abrir `Panel de Control` → `Programas y Características`
- Buscar "Microsoft .NET Framework"
- Debe aparecer versión 4.5 o superior

**Descargar e instalar:**
- [.NET Framework 4.8 (Recomendado)](https://dotnet.microsoft.com/download/dotnet-framework/net48)
- Reiniciar la PC después de instalar

### 2. Visual C++ Redistributable
Algunas DLLs de Digital Persona pueden requerirlo.

**Descargar:**
- [Visual C++ Redistributable 2015-2022 x64](https://aka.ms/vs/17/release/vc_redist.x64.exe)
- [Visual C++ Redistributable 2015-2022 x86](https://aka.ms/vs/17/release/vc_redist.x86.exe)

### 3. Permisos de Administrador
La aplicación necesita ejecutarse como administrador para acceder al lector de huellas.

---

## 🛠️ Pasos de Diagnóstico

### Paso 1: Verificar que el servicio se inicia
1. Navegar a la carpeta de instalación de PrestoV2:
   ```
   C:\Program Files\PrestoV2\resources\app\src\electron\
   ```

2. **Intentar ejecutar manualmente** `DigitalPersonaServiceDirect.exe`

3. **Observar si aparece algún error:**
   - ❌ "La aplicación no se pudo iniciar porque no se encontró su configuración en paralelo"
     → Falta Visual C++ Redistributable

   - ❌ "No se puede ejecutar porque falta .NET Framework"
     → Instalar .NET Framework 4.5+

   - ❌ "Acceso denegado"
     → Ejecutar como administrador

   - ❌ "No se encuentra DPFPDevNET.dll" o similar
     → Faltan DLLs de Digital Persona

### Paso 2: Verificar logs de la aplicación
1. Abrir PrestoV2
2. Presionar `Ctrl + Shift + I` para abrir DevTools
3. Ir a la pestaña "Console"
4. Buscar mensajes de error relacionados con "biometric" o "411"

### Paso 3: Verificar DLLs necesarias
Asegurarse de que estos archivos estén presentes:
```
C:\Program Files\PrestoV2\resources\app\src\electron\
├── DigitalPersonaServiceDirect.exe
├── DPFPDevNET.dll
├── DPFPEngNET.dll
├── DPFPGuiNET.dll
├── DPFPShrNET.dll
├── DPFPVerNET.dll
├── DPFPCtlXWrapperNET.dll
├── DPFPCtlXTypeLibNET.dll
└── DPFPShrXTypeLibNET.dll
```

---

## 🔧 Soluciones Rápidas

### Solución 1: Reinstalar con .NET Framework
1. Desinstalar PrestoV2
2. Instalar .NET Framework 4.8
3. Reinstalar PrestoV2
4. Ejecutar PrestoV2 como administrador (clic derecho → "Ejecutar como administrador")

### Solución 2: Verificar Firewall/Antivirus
Algunos antivirus pueden bloquear `DigitalPersonaServiceDirect.exe`:
1. Agregar excepción en Windows Defender
2. Agregar excepción en tu antivirus

### Solución 3: Ejecutar siempre como administrador
1. Clic derecho en el acceso directo de PrestoV2
2. Propiedades → Compatibilidad
3. ✅ Marcar "Ejecutar este programa como administrador"
4. Aplicar → Aceptar

---

## 📝 Script de Verificación Automática

Ejecuta este script en PowerShell (como administrador) para verificar todos los requisitos:

```powershell
# Guardar como verificar-requisitos.ps1

Write-Host "=== Verificación de Requisitos para PrestoV2 ===" -ForegroundColor Cyan
Write-Host ""

# Verificar .NET Framework
Write-Host "1. Verificando .NET Framework..." -ForegroundColor Yellow
$dotnetVersions = Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse |
    Get-ItemProperty -Name Version, Release -ErrorAction SilentlyContinue |
    Where-Object { $_.PSChildName -match '^(?!S)\p{L}' } |
    Select-Object PSChildName, Version, Release

$hasNet45 = $dotnetVersions | Where-Object { $_.Release -ge 378389 }
if ($hasNet45) {
    Write-Host "   ✅ .NET Framework 4.5+ instalado" -ForegroundColor Green
    $hasNet45 | ForEach-Object { Write-Host "      - $($_.PSChildName): $($_.Version)" -ForegroundColor Gray }
} else {
    Write-Host "   ❌ .NET Framework 4.5+ NO encontrado" -ForegroundColor Red
    Write-Host "      Descargar desde: https://dotnet.microsoft.com/download/dotnet-framework/net48" -ForegroundColor Yellow
}
Write-Host ""

# Verificar Visual C++ Redistributable
Write-Host "2. Verificando Visual C++ Redistributable..." -ForegroundColor Yellow
$vcRedist = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\*" -ErrorAction SilentlyContinue
if ($vcRedist) {
    Write-Host "   ✅ Visual C++ Redistributable instalado" -ForegroundColor Green
} else {
    Write-Host "   ⚠️  Visual C++ Redistributable no detectado" -ForegroundColor Yellow
    Write-Host "      Descargar desde: https://aka.ms/vs/17/release/vc_redist.x64.exe" -ForegroundColor Yellow
}
Write-Host ""

# Verificar archivos de PrestoV2
Write-Host "3. Verificando instalación de PrestoV2..." -ForegroundColor Yellow
$prestoPath = "C:\Program Files\PrestoV2\resources\app\src\electron"
if (Test-Path $prestoPath) {
    Write-Host "   ✅ Carpeta de instalación encontrada" -ForegroundColor Green

    # Verificar ejecutable
    $exePath = Join-Path $prestoPath "DigitalPersonaServiceDirect.exe"
    if (Test-Path $exePath) {
        Write-Host "   ✅ DigitalPersonaServiceDirect.exe encontrado" -ForegroundColor Green
    } else {
        Write-Host "   ❌ DigitalPersonaServiceDirect.exe NO encontrado" -ForegroundColor Red
    }

    # Verificar DLLs
    $dlls = @(
        "DPFPDevNET.dll",
        "DPFPEngNET.dll",
        "DPFPGuiNET.dll",
        "DPFPShrNET.dll",
        "DPFPVerNET.dll"
    )

    $missingDlls = @()
    foreach ($dll in $dlls) {
        $dllPath = Join-Path $prestoPath $dll
        if (-not (Test-Path $dllPath)) {
            $missingDlls += $dll
        }
    }

    if ($missingDlls.Count -eq 0) {
        Write-Host "   ✅ Todas las DLLs necesarias están presentes" -ForegroundColor Green
    } else {
        Write-Host "   ❌ Faltan las siguientes DLLs:" -ForegroundColor Red
        $missingDlls | ForEach-Object { Write-Host "      - $_" -ForegroundColor Red }
    }
} else {
    Write-Host "   ❌ PrestoV2 no está instalado en la ubicación esperada" -ForegroundColor Red
}
Write-Host ""

# Verificar permisos de administrador
Write-Host "4. Verificando permisos..." -ForegroundColor Yellow
$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if ($isAdmin) {
    Write-Host "   ✅ Ejecutando como administrador" -ForegroundColor Green
} else {
    Write-Host "   ⚠️  NO ejecutando como administrador" -ForegroundColor Yellow
    Write-Host "      Se recomienda ejecutar PrestoV2 como administrador" -ForegroundColor Yellow
}
Write-Host ""

Write-Host "=== Fin de la verificación ===" -ForegroundColor Cyan
Write-Host ""
Write-Host "Presione cualquier tecla para salir..."
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
```

---

## 📞 Soporte Adicional

Si después de seguir estos pasos el error persiste:

1. **Recopilar información:**
   - Versión de Windows
   - Logs de la aplicación (DevTools → Console)
   - Captura de pantalla del error

2. **Verificar compatibilidad:**
   - Windows 10/11 64-bit requerido
   - Lector Digital Persona compatible

3. **Reinstalación limpia:**
   - Desinstalar PrestoV2
   - Borrar carpeta: `C:\Program Files\PrestoV2`
   - Borrar carpeta: `C:\Users\[Usuario]\AppData\Roaming\PrestoV2`
   - Instalar .NET Framework 4.8
   - Reinstalar PrestoV2

---

## 🎯 Checklist Rápido

- [ ] .NET Framework 4.5+ instalado
- [ ] Visual C++ Redistributable instalado
- [ ] PrestoV2 ejecutándose como administrador
- [ ] Todas las DLLs presentes en la carpeta de instalación
- [ ] DigitalPersonaServiceDirect.exe se ejecuta manualmente sin errores
- [ ] Firewall/Antivirus permite DigitalPersonaServiceDirect.exe
- [ ] XAMPP/Apache corriendo en el servidor
