Emezeta.com

Crear portables (SFX Avanzado)


Una aplicación portable es un programa que puede ser ejecutado sin necesidad de instalación, lo que lo hace ideal para tener en memorias USB o pendrives y utilizar en equipos diferentes.

Por ejemplo, un firefox portable serviría para poder navegar con el desde cualquier equipo, con la misma configuración, favoritos o extensiones instaladas.

sfx exe portable

Un archivo SFX es un fichero comprimido convertido en un sólo ejecutable independiente, que se encargará (sin necesidad de un programa compresor externo) de descomprimirse a sí mismo.

Varios compresores conocidos como winrar o winzip son capaces de crear ficheros auto-extraibles (SFX), incluso una utilidad poco conocida de Windows llamada iexpress permite crearlos de una forma sencilla y rápida, sin embargo, yo voy a hablar de como crearlos con 7zip por varias razones:

  • Licencia: Aplicaciones como Winrar o winzip son privadas, mientras que 7zip es un programa open source.
  • Compresión: El ratio de compresión del 7z suele ser mucho mejor que el de los rar, zip o cab por lo general.
  • Personalización: 7zip ofrece (a través de un módulo) una potencia de personalización bastante interesante.

Ejemplo

Veamos un ejemplo. El gran juego Beneath a Steel Sky (~8MB) de Revolution Software.

Al ejecutar el fichero .exe portable, mostrará una única ventana similar a la siguiente:

beneath a steel sky aventura grafica portable

Acto seguido ejecutará el juego mediante DosBox (utiliza un emulador, puesto que se trata de una aventura gráfica clásica). Todo ello, sin tener que recurrir a ningún clic adicional, operación avanzada, tecleo de comandos, etc.

Paso a paso, veamos como realizar esto.

1. Preparación del juego

Creamos una carpeta llamada Sky donde alojaremos los ficheros necesarios para la ejecución del juego.

Como nuestro juego en cuestión se trata de una aventura gráfica de hace años, no funciona en arquitecturas x64 (64 bits), ni tampoco en los Windows actuales (ya que era un juego de DOS), para ello instalamos la última versión de DosBox en nuestro equipo.

Copiamos de la carpeta DosBox (en Archivos de programa) los ficheros dosbox.exe, sdl.dll, sdl_net.dll y dosbox.conf.

dosbox juego

Adicionalmente, he creado un icono (sky.ico) relacionado con el juego, para una mejor representación del mismo. Se puede utilizar IcoFX, de los 62 programas esenciales gratis para ello.

2. Configuración del emulador DosBox

Abrimos con el bloc de notas el fichero dosbox.conf y establecemos las opciones que queremos para el juego. Comentaré las más importantes (busquen las opciones en el fichero):

  • fullscreen=false: Activa o desactiva la ejecución del juego a pantalla completa. Yo la suelo dejar desactivada, y ya el que quiera activarla en el juego que pulse ALT+ENTER.
  • autolock=false: En este caso desactivo el bloqueo del emulador cuando el ratón está «fuera» del emulador. Esto produce un molesto comportamiento con el ratón en algunos juegos.
  • machine=svga_s3: Utiliza una emulación de tarjeta SuperVGA S3 en DosBox. Actualmente la más apropiada para estos juegos.
  • scaler=hq3x forced: Esto es bastante importante. Los juegos de esta época tenían unas resoluciones muy pequeñas en comparación con las brutales resoluciones de hoy en día. Para paliar esto, podemos utilizar varios algoritmos de escalado, como por ejemplo normal3x, hq3x o scan3x (entre otros). Personalmente he elegido el segundo, que utiliza un efecto de suavizado para evitar que se note demasiado el efecto pixelado. El tag forced fuerza a redimensionar a la resolución adecuada.
dosbox modes

Existen muchas más opciones, si quieres saber más sobre Dosbox, echa un vistazo a la guía Manual de DOSBox: Revive juegos antiguos.

Para terminar, vamos a la última sección del fichero dosbox.conf llamada [autoexec] (comandos que serán ejecutados al arrancar el dosbox) y lo dejamos así:

[autoexec]
keyb sp
mount c: .
c:
sky
exit

La línea keyb sp establece el teclado en idioma español, por lo que no tendremos problemas con caracteres como la ñ, los dos puntos o los símbolos especiales.

Con la línea mount c: . montamos la carpeta actual como disco duro. Esto es especialmente importante para que funcione posteriormente con el SFX aplicado.

En algunos juegos, nos obligan a tener insertado el CD para poder jugar, podemos montar imágenes con el comando imgmount d: imagen.iso -t iso, por ejemplo.

Cambiamos a la unidad c: (la emulada, no la real) y ejecutamos el juego (comando sky).

La línea exit hará que al salir del juego, cierre el emulador y no se quede abierta la consola del mismo.

3. Compresión y empaquetado del contenido

Como dijimos antes, vamos a realizar una compresión con el programa 7zip, un compresor open source. Así pues, lo descargamos y lo instalamos.

Una vez instalado, seleccionamos todos los archivos de nuestra carpeta Sky y con el botón derecho elegimos Añadir al archivo...

Lo comprimimos en formato 7z, compresión ultra (máxima compresión) y tipo LZMA. Obtendremos el fichero comprimido sky.7z.

4. Preparación del auto-extraible SFX

Para la creación del fichero auto-extraible necesitaremos tres ficheros:

  • contenido.7z: El fichero con el contenido del juego o programa. En nuestro caso el anterior sky.7z.
  • config.txt: Un fichero script con la información acerca del comportamiento del SFX.
  • 7zsd.sfx: Módulo modificado SFX del 7zip.

Para la creación del SFX vamos a utilizar el módulo 7zSFX de Oleg Scherbakov. Nos descargamos el módulo: 7zSD.sfx.

Creamos un fichero de texto llamado config.txt, que actuará como script de personalización de SFX y escribimos lo siguiente:

;!@Install@!UTF-8!
InstallPath="%TEMP%\sky"
GUIFlags="32"
ExtractTitle="Beneath a Steel Sky"
ExtractDialogText="Cargando juego..."
ExecuteFile="%TEMP%\sky\dosbox.exe"
ExecuteParameters=" -noconsole"
;!@InstallEnd@!

El fichero debe guardarse con formato unicode (UTF8). Veamos por partes las opciones utilizadas:

  • InstallPath=: Ruta donde se descomprime el contenido del auto-extraíble. Utilizamos la variable del sistema %TEMP% (funciona en Windows 2000, XP, Vista...) para que descomprima todo el contenido en una carpeta en la ubicación de los ficheros temporales. Se podría haber elegido otro lugar, pero este es interesante para que aún guardando el fichero portable en un CD o DVD, siga funcionando perfectamente y salvando las partidas guardadas en nuestro disco duro.
  • GUIFlags=: Opciones especiales. 32 muestra el icono en la ventana, 8 usa estilos de XP, 4 muestra el porcentaje numérico debajo de la barra de progreso, etc...
  • ExtractTitle=: Sirve para especificar el título de la ventana de extracción.
  • ExtractDialogText=: Muestra un texto en la ventana de extracción.
  • ExecuteFile=: Fichero a ejecutar una vez termina la extracción de datos.
  • ExecuteParameters=: Parámetros de la ejecución anterior. En nuestro caso, no muestra la ventana de debug del DosBox.

Sin embargo, se pueden utilizar más opciones y parámetros interesantes como podría ser mensajes de ayuda previos, un botón con una cuenta atrás, personalizar las carpetas de extracción de datos, crear iconos de programas o accesos directos, etc...

7zip sfx

5. Cambio del icono del portable

De forma opcional, podemos cambiar el icono final del fichero portable SFX. Para ello, como aún no se puede hacer de forma automática, podemos utilizar el programa Resource Hacker, y mediante él, abrir el anteriormente mencionado fichero 7zsd.sfx.

resource hacker

Desplegamos la carpeta Icon y la carpeta 1, marcamos el 0 y con botón derecho seleccionamos Replace Resource.... Ahora marcamos la opción Open file with new icon... y elegimos el icono que creamos anteriormente.

Pulsamos Replace modificando el icono, y guardamos la copia sobrescribiendo el fichero 7zsd.sfx en el menú File / Save.

6. Creación del fichero SFX final

Nos queda tan sólo el último paso. Hacer una copia binaria de los 3 ficheros necesarios. Para ello, abrimos una terminal del sistema operativo (Inicio / Ejecutar / cmd) y accedemos a la carpeta Sky.

Una vez allí, escribimos:

copy /b 7zsd.sfx + config.txt + contenido.7z sfx.exe

Eso hará una copia binaria de los tres ficheros, creando el SFX auto-extraíble sfx.exe final, listo para ser ejecutado desde memorias USB, CD, DVD, etc...

Como paso opcional, se puede utilizar un programa como UPX para reducir el tamaño de los ficheros ejecutables.

UPX es un compresor de ficheros EXE «al vuelo», es decir, no al estilo de los compresores tradicionales como el ZIP, sino que reducen el tamaño de los ejecutables, sin necesidad de volverlos a descomprimir.

upx -9 dosbox.exe

Pueden utilizarse para reducir tamaño de ficheros EXE (del contenido del paquete 7z) o del fichero final, ya que también reduce tamaño de los ejecutables PE de Windows. Por ejemplo, el mismo ejecutable de DosBox lo reduce más de un 31%.