# Instalador de FAVERVIEW para Windows 10 y 11 (pixelsanto.com). # # Uselo asi, en PowerShell, sin abrirlo como administrador: # # irm https://pixelsanto.com/faverview/instalar.ps1 | iex # # Es un script de texto: puede leerlo completo antes de ejecutarlo. En orden: # 1. Instala uv (de Astral) desde winget si falta. Es un paquete oficial y firmado. # 2. Instala Tesseract OCR (de UB Mannheim) desde winget si falta. Windows pide permiso una vez. # 3. Descarga el paquete de FAVERVIEW 4.0.0 de pixelsanto.com y comprueba su huella SHA-256. # 4. Lo instala con uv (que trae su propio Python 3.12) y crea el acceso directo del Escritorio. # 5. Abre FAVERVIEW. # No trae ningun .exe propio, no cambia la politica de ejecucion de scripts y no toca sus datos # (%LOCALAPPDATA%\FAVERVIEW). Si ya tiene FAVERVIEW, lo deja en la version 4.0.0. & { # Continue: uv y winget escriben avisos por stderr y en PowerShell 5.1 eso no debe cortar la instalacion. # Los pasos que si importan llevan -ErrorAction Stop o se comprueban a mano. $ErrorActionPreference = 'Continue' $ProgressPreference = 'SilentlyContinue' # sin barra de progreso, Invoke-WebRequest es mucho mas rapido [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12 $Version = '4.0.0' $Url = 'https://pixelsanto.com/descargas/faverview-4.0.0-cp312-cp312-win_amd64.whl' $Sha256 = '9f2ea31b2bb001a13a7f39fb072a768a265648450f18c8149b3ffe5aa4731eaf' $Ayuda = 'https://pixelsanto.com/blog/instalar-faverview-v4' function Paso($n, $texto) { Write-Host ''; Write-Host " [$n/5] $texto" -ForegroundColor Cyan } function Bien($texto) { Write-Host " $texto" -ForegroundColor Green } function Aviso($texto) { Write-Host " $texto" -ForegroundColor Yellow } function Existe($comando) { [bool](Get-Command $comando -ErrorAction SilentlyContinue) } function Refrescar-Path { # Lo que winget acaba de instalar, sin cerrar y reabrir PowerShell. $maquina = [Environment]::GetEnvironmentVariable('Path', 'Machine') $usuario = [Environment]::GetEnvironmentVariable('Path', 'User') $env:Path = "$maquina;$usuario;$env:USERPROFILE\.local\bin" } function Winget($id) { winget install -e --id $id --silent --accept-package-agreements --accept-source-agreements | Out-Host Refrescar-Path } function Tesseract-Instalado { (Existe 'tesseract') -or (Test-Path "$env:ProgramFiles\Tesseract-OCR\tesseract.exe") -or (Test-Path "$env:LOCALAPPDATA\Programs\Tesseract-OCR\tesseract.exe") } try { Write-Host '' Write-Host " FAVERVIEW $Version - instalacion para Windows" -ForegroundColor White Write-Host ' Tarda entre 3 y 10 minutos segun su conexion. No cierre esta ventana.' if (-not [Environment]::Is64BitOperatingSystem) { throw 'FAVERVIEW necesita Windows de 64 bits.' } $hayWinget = Existe 'winget' Paso 1 'Instalador de Python (uv)' if (Existe 'uv') { Bien 'uv ya estaba instalado.' } else { if ($hayWinget) { Winget 'astral-sh.uv' } if (-not (Existe 'uv')) { # Sin winget (o si fallo): el instalador oficial de Astral. Invoke-RestMethod https://astral.sh/uv/install.ps1 -ErrorAction Stop | Invoke-Expression Refrescar-Path } if (-not (Existe 'uv')) { throw 'No se pudo instalar uv.' } Bien 'uv instalado.' } Paso 2 'Lector de texto (Tesseract OCR)' if (Tesseract-Instalado) { Bien 'Tesseract ya estaba instalado.' } elseif ($hayWinget) { Aviso 'Si Windows pregunta si permite que la aplicacion haga cambios, pulse Si.' Winget 'UB-Mannheim.TesseractOCR' if (Tesseract-Instalado) { Bien 'Tesseract instalado.' } else { Aviso 'Tesseract no quedo instalado. FAVERVIEW abre igual, pero sin comparar textos. Vea la ayuda.' } } else { Aviso 'Este Windows no tiene winget: instale Tesseract despues siguiendo la ayuda. FAVERVIEW abre igual.' } Paso 3 "Descargando FAVERVIEW $Version" $carpeta = Join-Path $env:TEMP 'faverview-instalar' New-Item -ItemType Directory -Force -Path $carpeta -ErrorAction Stop | Out-Null # uv necesita el nombre original del paquete (lleva la version y la plataforma). $paquete = Join-Path $carpeta ([IO.Path]::GetFileName(([Uri]$Url).AbsolutePath)) Invoke-WebRequest -Uri $Url -OutFile $paquete -UseBasicParsing -ErrorAction Stop if ($Sha256) { $huella = (Get-FileHash -Algorithm SHA256 -Path $paquete -ErrorAction Stop).Hash if ($huella -ne $Sha256.ToUpperInvariant()) { Remove-Item -Force $paquete throw 'El paquete descargado no coincide con el publicado (huella SHA-256 distinta). Intente de nuevo.' } Bien 'Paquete descargado y verificado (SHA-256).' } else { Bien 'Paquete descargado.' } Paso 4 'Instalando (la primera vez descarga Python 3.12 y las librerias)' uv tool install --force --python 3.12 $paquete | Out-Host if ($LASTEXITCODE -ne 0) { throw 'uv no pudo instalar FAVERVIEW.' } uv tool update-shell 2>&1 | Out-Null # deja el comando faverview disponible en las proximas ventanas Refrescar-Path $exe = Join-Path ((uv tool dir --bin) | Select-Object -First 1).Trim() 'faverview.exe' if (-not (Test-Path $exe)) { throw 'La instalacion termino, pero no se encontro faverview.exe.' } & $exe --acceso-directo | Out-Null Remove-Item -Recurse -Force $carpeta -ErrorAction SilentlyContinue Bien 'FAVERVIEW instalado. Acceso directo creado en el Escritorio.' Paso 5 'Abriendo FAVERVIEW' Start-Process -FilePath $exe -ErrorAction Stop Write-Host '' Write-Host ' Listo. FAVERVIEW se abre en su navegador en unos segundos.' -ForegroundColor Green Write-Host ' Las proximas veces, abralo con el icono FAVERVIEW del Escritorio.' Write-Host ' Ya puede cerrar esta ventana.' Write-Host '' } catch { Write-Host '' Write-Host " No se pudo terminar la instalacion: $($_.Exception.Message)" -ForegroundColor Red Write-Host " Puede volver a pegar el mismo comando: retoma donde quedo. Ayuda: $Ayuda" Write-Host '' } }