Sunday, August 23, 2026

Estas son las diferencias prácticas entre usar nsis vs portable en electron-builder en cuanto a licencias y actualizaciones?

 

Aquí tienes la comparación práctica y clara entre nsis (instalable) y portable, especialmente enfocada en licencias y actualizaciones:

imagen-NSIS


1. Instalación y distribución

Aspectonsis (Instalable)portable
Tipo de archivoUn .exe instaladorUn .exe o carpeta lista para ejecutar
Dónde se guardaProgram Files o AppDataDonde el usuario lo ponga (USB, carpeta, etc.)
Accesos directosSí (menú inicio, escritorio)No (a menos que lo programes)
DesinstaladorSí, incluidoNo
Facilidad de copiarMás difícil de “regalar” completoMuy fácil (solo copias la carpeta)

2. Licencias y protección (lo más importante para ti)

Aspectonsis (Instalable)portable
Dónde guardar la licenciaPuede escribir en ubicaciones más protegidasSolo dentro de su propia carpeta
Atar a hardware (HWID)Más fácil y establePosible, pero más vulnerable a copias
Validación onlineFunciona igual de bienFunciona igual de bien
Dificultad de piratearLigeramente más alta (hay que copiar más cosas)Más baja (se copia todo fácil)
Control al instalarPuedes pedir licencia durante la instalaciónNo hay proceso de instalación

Conclusión en licencias: nsis te da más control y más opciones para proteger el programa. El portable es más débil en este aspecto porque el usuario puede copiar toda la carpeta fácilmente.

3. Actualizaciones

Aspectonsis (Instalable)portable
Auto-update (electron-updater)Muy bien soportadoMás complicado / limitado
Experiencia del usuarioActualiza solo, como Chrome o DiscordSuele requerir que el usuario baje la nueva versión
Actualizaciones diferencialesSí (descarga solo lo que cambió)Generalmente no
EstabilidadMás robustoMás propenso a problemas de permisos

Conclusión en actualizaciones: nsis es claramente superior. El sistema de actualizaciones automáticas funciona mucho mejor y es más profesional.

4. Resumen final (recomendación)

ObjetivoMejor opciónMotivo
Proteger contra pirateríansisMás difícil de copiar y más opciones de control
Licencias serias + activación onlinensisMejor integración
Actualizaciones automáticasnsisMucho más fácil y estable
Que el usuario lo lleve en un USBportableEsa es su ventaja principal
Simplicidad máxima de distribuciónportableSolo se comparte un archivo/carpeta



¿Cómo se suele implementar la licencia (serial + online) en un proyecto con nsis, y prefieres ver las diferencias de configuración exactas en el package.json / electron-builder?


1. Diferencias de configuración en electron-builder

En el archivo de configuración (normalmente package.json o electron-builder.yml) se ve así:

Versión Instalable (lo que tienen ahora):

JSON
"build": {
  "win": {
    "target": ["nsis"]
  },
  "nsis": {
    "oneClick": false,
    "allowToChangeInstallationDirectory": true,
    "createDesktopShortcut": true,
    "createStartMenuShortcut": true,
    "installerIcon": "build/icon.ico",
    "uninstallerIcon": "build/icon.ico"
  }
}

Versión Portable:

JSON
"build": {
  "win": {
    "target": ["portable"]
  },
  "portable": {
    "artifactName": "${productName}-Portable-${version}.exe"
  }
}

También se pueden generar ambos al mismo tiempo:

JSON
"target": ["nsis", "portable"]


2. Cómo se suele implementar la licencia (serial + online) en un programa con NSIS

Esta es la parte más importante para lo que tú quieres (que no sea fácil de regalar ni de crackear).

Arquitectura recomendada (la más usada actualmente):

  1. El usuario introduce un serial (o se genera automáticamente).
  2. El programa toma el Hardware ID de la máquina (huella única).
  3. Se envía al servidor (serial + HWID).
  4. El servidor responde si la licencia es válida o no.
  5. Si es válida, se guarda un token/archivo de licencia de forma segura.
  6. Cada cierto tiempo (o al iniciar) se vuelve a validar online.

Flujo típico:

text
Usuario introduce serial
        ↓
Programa genera HWID (node-machine-id)
        ↓
Envía a tu API: { serial, hwid, version }
        ↓
Tu servidor verifica:
   - ¿El serial existe?
   - ¿Está activo?
   - ¿Cuántas máquinas tiene permitidas?
   - ¿Está vencido?
        ↓
Responde: { valid: true, token: "xxx", expires: "..." }
        ↓
El programa guarda el token de forma ofuscada

Librerías y herramientas comunes:

FunciónHerramienta recomendadaNotas
Generar HWIDnode-machine-idMuy usada
Ofuscar códigojavascript-obfuscator + bytenodeDificulta el reverse engineering
Sistema de licencias completoCryptlex, Keygen.sh, LicenseSpringLos más profesionales
Solución propiaTu propio backend + JWTMás barato, pero más trabajo
Empaquetado adicionalelectron-builder + firma de códigoYa lo están usando

Dónde se guarda la licencia en un instalable (NSIS):

  • Preferiblemente en una carpeta protegida (AppData del usuario o una ubicación con permisos).
  • Nunca solo en la carpeta del programa (porque es más fácil de copiar).
  • Se recomienda cifrar el archivo de licencia.


Recomendación según tu objetivo

Como tu prioridad es que no sea fácil de regalar ni de crackear, la combinación más fuerte es:

  • Instalador NSIS firmado (ya lo tienen)
  • Validación de licencia online + HWID
  • Ofuscación del código
  • (Opcional pero muy recomendable) Usar un servicio profesional de licencias (Cryptlex o Keygen) en lugar de hacerlo 100% casero al principio


Un programa portable es exactamente lo contrario de uno que se descarga e instala.

Diferencia clara:

TipoQué haceEjemplo
InstalableSe descarga un instalador (.exe o .msi), lo ejecutas, el programa se copia a Program Files, escribe en el registro de Windows, crea accesos directos, etc.Google Chrome normal, Firefox normal, Office, la mayoría de programas
PortableDescargas un archivo o carpeta, lo descomprimes (si viene en .zip) y lo ejecutas directamente. No se instala nada. No toca el registro ni deja rastros en el sistema.Chrome Portable, Firefox Portable, VLC Portable, Notepad++ Portable, 7-Zip Portable

Resumen simple:

  • Instalable → “Voy a instalarlo en mi Windows”
  • Portable → “Voy a bajarlo, descomprimirlo y ejecutarlo. Listo.”

Por eso se llaman portable: puedes llevarlos en un pendrive y ejecutarlos en cualquier PC sin instalar nada.

Ejemplo con Chrome:

  • Chrome normal: lo descargas de google.com/chrome → lo instalas → queda instalado en el sistema.
  • Chrome Portable: descargas una versión portable (de sitios como PortableApps o similares), la descomprimes y ejecutas el .exe directamente. No se instala.

Ninguno de los dos es inherentemente más seguro contra ser crackeado o regado gratis.

La diferencia entre portable e instalable tiene muy poco que ver con la seguridad real contra piratería. Lo que realmente importa es cómo proteges el programa, no si se instala o no.

Comparación rápida:

AspectoInstalablePortable
Facilidad de regalar/piratearUn poco más difícil (hay que copiar archivos + registro a veces)Más fácil (solo copias la carpeta)
Opciones de protecciónTiene más herramientas (servicios, drivers, registro, permisos de sistema)Tiene menos, pero igual se puede proteger bien
Dificultad real de crackearDepende casi 100% de la protección que le pongasDepende casi 100% de la protección que le pongas
Licencias / activaciónMuy usada (serial + online activation)También se puede (y se usa mucho)

Lo que realmente evita que te lo “rieguen” o lo hackeen:

  1. Validación online de licencia (el método más fuerte actualmente)
  2. Atar la licencia a hardware (HWID)
  3. Ofuscación fuerte + packing del ejecutable
  4. Lógica crítica en el servidor (si parte del programa necesita internet)
  5. Anti-tampering (detectar si modificaron el .exe)

Codex (y casi todos los programas serios) están poniendo capas de licencia independientemente de si son portables o instalables. La protección va por el sistema de licencias, no por el tipo de distribución.

Conclusión directa:

  • Si quieres máxima dificultad para que lo regalen fácil → Instalable es ligeramente mejor (porque la gente normal no sabe copiarlo bien).
  • Si quieres máxima seguridad real contra cracks → da igual. Lo que importa es la capa de licencia + ofuscación + validación online.

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.

---------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------