Pasos para instalar OkuControl v5 en un gimnasio nuevo, pasar de la v4 a la v5 y actualizar entre versiones. Los comandos van en PowerShell como administrador (clic derecho en el botón de Inicio → Terminal (administrador) o Windows PowerShell (administrador)).
Pegue cada comando en una sola línea y completo. Al pegar varias líneas por RustDesk, Windows a veces las ejecuta en desorden y las variables quedan vacías.
Register_SDK_x64 como administrador): Instalación SDK de ZKTeco. Sin esto sale el error «Clase no registrada».Revisar la computadora:
"Windows 64 bits: $([Environment]::Is64BitOperatingSystem)"; dotnet --list-runtimes 2>$null | findstr WindowsDesktop; "C:\Program Files","C:\Program Files (x86)" | ForEach-Object { Get-ChildItem $_ -Recurse -Filter OkuControl.exe -ErrorAction SilentlyContinue } | ForEach-Object { [pscustomobject]@{ Carpeta = $_.DirectoryName; Fecha = $_.LastWriteTime } } | Format-Table -AutoSize
Windows 64 bits: True.Los nombres siguen el estándar OkuStacks: OKGM-OKUCON-vX.Y[-beta.N]-x64…zip.
| Paquete | Para qué |
|---|---|
OKGM-OKUCON-<versión>-x64-autocontenido.zip |
Instalación completa que ya trae .NET 8. Recomendado para instalar desde cero. |
OKGM-OKUCON-<versión>-x64.zip |
Instalación completa sin .NET (la computadora necesita .NET 8 Desktop Runtime x64). |
OKGM-OKUCON-<versión>-x64-actualizacion.zip |
Solo los archivos de OkuControl que cambian; se copia encima de una v5 ya instalada. |
Los zips se dejan siempre en la carpeta Descargas\oku:
New-Item -ItemType Directory -Force "$env:USERPROFILE\Downloads\oku" | Out-Null; explorer "$env:USERPROFILE\Downloads\oku"
Usa el mismo usuario con el que OkuControl entra a la base de datos (no pide contraseña):
$k=Get-ItemProperty "HKCU:\SOFTWARE\OkuControlV4"; $mysql=(Get-ChildItem "C:\Program Files\MySQL" -Recurse -Filter mysqldump.exe -ErrorAction SilentlyContinue | Select-Object -First 1).FullName; & $mysql -h $k.DbHost -P $k.DbPort -u $k.DbUser "--password=$($k.DbPassword)" --routines $k.DbDataBase --result-file="C:\respaldo-okucontrol-$(Get-Date -Format yyyyMMdd-HHmm).sql"; Get-ChildItem C:\respaldo-okucontrol-*.sql | Select-Object Name, Length, LastWriteTime
Length debe ser de varios millones de bytes. Si es 0, el respaldo no se hizo: no continúe.Con el zip autocontenido en Descargas\oku. Si ya había un OkuControl en la carpeta, se renombra a OkuControl-anterior-… (no se borra):
$zip="$env:USERPROFILE\Downloads\oku\OKGM-OKUCON-v5.0-beta.5-x64-autocontenido.zip"; $destino="C:\Program Files\Okutic\OkuControl"; $tmp="$env:TEMP\okucon-auto"; Stop-Process -Name OkuControl, CefSharp.BrowserSubprocess -Force -ErrorAction SilentlyContinue; Start-Sleep 3; if (Test-Path $destino) { Rename-Item $destino "OkuControl-anterior-$(Get-Date -Format yyyyMMdd-HHmm)" }; Remove-Item $tmp -Recurse -Force -ErrorAction SilentlyContinue; Expand-Archive $zip $tmp -Force; New-Item -ItemType Directory -Force $destino | Out-Null; Copy-Item "$tmp\OKGM-OKUCON-v5.0-beta.5-x64-autocontenido\OkuControl\*" $destino -Recurse -Force; $ws=New-Object -ComObject WScript.Shell; $lnk=$ws.CreateShortcut("$([Environment]::GetFolderPath('Desktop'))\OkuControl.lnk"); $lnk.TargetPath="$destino\OkuControl.exe"; $lnk.WorkingDirectory=$destino; $lnk.Save(); Start-Process "$destino\OkuControl.exe" -WorkingDirectory $destino
Cambie la versión en las dos partes del comando donde aparece (v5.0-beta.5).
C:\Program Files\Okuticc), renómbrelo (...-anterior) y deje un solo acceso directo: solo puede haber un OkuControl abierto.Con el zip -actualizacion en Descargas\oku. Solo cambie la versión en $v:
$v="v5.0-beta.5"; $zip="$env:USERPROFILE\Downloads\oku\OKGM-OKUCON-$v-x64-actualizacion.zip"; $destino="C:\Program Files\Okutic\OkuControl"; $tmp="$env:TEMP\okucon-act"; Stop-Process -Name OkuControl, CefSharp.BrowserSubprocess -Force -ErrorAction SilentlyContinue; Start-Sleep 3; if (Get-Process OkuControl -ErrorAction SilentlyContinue) { Write-Host "OkuControl sigue abierto: ciérralo a mano y vuelve a pegar la línea" -ForegroundColor Red } else { Remove-Item $tmp -Recurse -Force -ErrorAction SilentlyContinue; Expand-Archive $zip $tmp -Force; Copy-Item "$tmp\OKGM-OKUCON-$v-x64-actualizacion\*" $destino -Force; Get-Item "$destino\OkuControl.dll" | Select-Object Name, LastWriteTime; Start-Process "$destino\OkuControl.exe" -WorkingDirectory $destino }
OkuControl.dll con la fecha del zip y el título debe decir la versión nueva.Get-ChildItem C:\Users -Recurse -Filter "OKGM-OKUCON-*.zip" -ErrorAction SilentlyContinue | Select-Object FullNameMenú Inicio (lista de aplicaciones):
$destino="C:\Program Files\Okutic\OkuControl"; $carpeta="$env:APPDATA\Microsoft\Windows\Start Menu\Programs\OkuControl"; New-Item -ItemType Directory -Force $carpeta | Out-Null; $ws=New-Object -ComObject WScript.Shell; $lnk=$ws.CreateShortcut("$carpeta\OkuControl.lnk"); $lnk.TargetPath="$destino\OkuControl.exe"; $lnk.WorkingDirectory=$destino; $lnk.Save()
Anclar a Inicio o a la barra de tareas (Windows no lo permite por comando): menú Inicio → buscar OkuControl → clic derecho → Anclar a Inicio o Más → Anclar a la barra de tareas.
Abrir OkuControl al prender la computadora (recomendado: OkuControl debe estar abierto a medianoche para bloquear a los vencidos y desbloquear a los que empiezan ese día):
$destino="C:\Program Files\Okutic\OkuControl"; $ws=New-Object -ComObject WScript.Shell; $lnk=$ws.CreateShortcut("$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\OkuControl.lnk"); $lnk.TargetPath="$destino\OkuControl.exe"; $lnk.WorkingDirectory=$destino; $lnk.Save()
Para quitarlo, borre OkuControl.lnk de la carpeta Inicio (shell:startup).
En Configuración → Usuarios remotos:
/api/okutic/socio/lista/{sucursal}).DueDate es el día en que ya no puede entrar (el último día válido es el anterior).05:00-23:59): solo si el gimnasio está cerrado fuera de ese horario. Evita bloquear y desbloquear a la mayoría de los socios cada noche y cada mañana en ZKTeco.En Configuración → Validador de accesos: tipo, URL de validación, número de sucursal y, si GymForce ya la tiene, la URL de entrada (/api/okutic/socio/entrada).
Ver la lista que manda GymForce (cuántos socios, horarios distintos, fechas de inicio futuras), sin cambiar nada:
$k=Get-ItemProperty "HKCU:\SOFTWARE\OkuControlParams"; $r=Invoke-RestMethod $k.UrlGetRemoteUsers; $u=$r.active_users; "Socios: $($u.Count)"; "Con horario: $(($u | Where-Object { $_.Schedule }).Count)"; "Empiezan después de hoy: $(($u | Where-Object { $_.StartDate -and [datetime]$_.StartDate -gt (Get-Date).Date }).Count)"; $u | Where-Object { $_.Schedule } | ForEach-Object { $_.Schedule | ConvertTo-Json -Compress -Depth 5 } | Group-Object | Sort-Object Count -Descending | Select-Object Count, @{n='Horario';e={$_.Name}} -First 10 | Format-Table -Wrap
Las advertencias «DEVICE WITH SN:… NOT REGISTERED» justo al abrir OkuControl son normales (los equipos preguntan antes de que termine de cargar).
Cierre OkuControl, renombre C:\Program Files\Okutic\OkuControl a OkuControl-v5 y OkuControl-anterior-… a OkuControl, y ábralo. La base de datos sirve para las dos. Si hiciera falta restaurar la base de datos, use el respaldo del paso 3.