Destacados

Más
Jueves, 15 de octubre, 2009

Crear portables (SFX Avanzado)

32 +40K

Pequeño tutorial para crear SFX avanzados portables mediante el compresor open source 7zip. Ilustrado con un juego emulado como ejemplo.

Publicidad

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.

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:

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.

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.

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...

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.

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%.

Comparte este artículo
Sobre el autor de Emezeta

Escrito por , más conocido como Manz. Es Ingeniero-Técnico en Informática de Gestión por la Universidad de La Laguna y residente en Santa Cruz de Tenerife.

Artículos relacionados
32 comentarios de lectores
Geekdraz Geekdraz Jueves, 15 de octubre de 2009, 23:27
1
Qué bueno el artículo, a ver si me lo releo con calma y lo 'testeo' con algún juego clásico ;)
Responder Permalink URL · Chrome 3.0.195.25 · Windows XP ·
Mojito Mojito Viernes, 16 de octubre de 2009, 01:10
2
Desde luego, que nadie diga que no te curras los posts... qué pasada! xD keep the good work =)... si consiguiera echar a caminar Wing Commander IV con esto sería tan feliz... xD
Responder Permalink Mozilla Firefox 3.5.3 · Macintosh ·
ulysess ulysess Viernes, 16 de octubre de 2009, 07:16
3
Desde el punto 3, es más fácil hacerlo todo con WinRAR.
Responder Permalink Chrome 3.0.195.24 · Windows XP ·
Manz Manz Viernes, 16 de octubre de 2009, 11:34
4
@ulysess: Efectivamente, es más sencillo hacerlo con Winrar, Winzip, Iexpress o incluso con 7zip (marcando la opción Crear auto-extraible al comprimir), sin embargo, las opciones de personalización no son tan potentes como en este método. Personalmente, lo que me parece interesante también es que una vez tienes montado todo «este tinglado», hacer un auto-extraíble de otro programa o juego es muy sencillo.
Responder Permalink URL · Mozilla Firefox 3.5.3 · Windows Vista ·
Kromshadows Domingo, 18 de octubre de 2009, 13:40
5
Enhorabuena por el artículo. Sin duda mas de uno lo pondremos en práctica. Buen trabajo, sigue así.
Responder Permalink Mozilla Firefox 3.0.14 · Ubuntu Linux ·
Interesante
Guti Guti Martes, 20 de octubre de 2009, 12:46
6
Muy interesante la guía. En todo caso sobre UPX, si quieres mejorar el grado de compresión obtenido, te recomiendo que pruebes con los siguientes modificadores: UPX --best --lzma --ultra-brute Seguro que el ratio pasa de 31% a uno mucho mejor. Ya nos dirás cuánto!
Responder Permalink URL · Opera 9.80 · Windows Vista ·
NepT1 NepT1 Viernes, 23 de octubre de 2009, 13:18
7
Esta muy bien, sobretodo si se utiliza con tu colección de juegos de Aventuras gráficas :)
Responder Permalink URL · Mozilla Firefox v3.5.5pre (Shiretoko) · Ubuntu Linux ·
kutastre kutastre Viernes, 30 de octubre de 2009, 22:31
8
Es util, pero aplicar esto en determinados casos no es nada facil... Para aplicar esto en programas mas actuales como se hace? En las aplicaciones antiguas todos los archivos necesarios para la ejecucion se encontraban en un solo directorio, pero hoy en dia se distribuyen por un monton de carpetas distintas.
Responder Permalink Mozilla Firefox 3.5.3 · Windows XP ·
Gonzalo Gonzalo Domingo, 1 de noviembre de 2009, 18:34
9
Es un muy buen tutorial y sinceramente admiro tu trabajo en cada post y la originalidad que tienen cada uno de ellos. Yo he creado un portable del juego sims 1 y me anda de maravillas. Saludos desde Argentina
Responder Permalink URL · Chrome 3.0.195.27 · Windows XP ·
Mickeley Mickeley Domingo, 22 de noviembre de 2009, 15:29
10
Bueno Manz, llego mas tarde.. pero te digo que me a servido un montón este método. Lo leí en su día y lo he puesto hoy en práctica con el viejo BlueBrothers de 1991, y a quedado genial. Muchísimas gracias.
Responder Permalink Mozilla Firefox 3.5.5 · Windows 7 ·
Uriel Uriel Jueves, 26 de noviembre de 2009, 00:22
11
Muchas gracias ! gracias a tu explicacion sencilla pude hacer el Office 2007 desatendido !
Responder Permalink Mozilla Firefox 3.5.5 · Windows 7 ·
hax_1000 hax_1000 Lunes, 25 de enero de 2010, 21:43
12
Muy buen tutorial deberdad !! solo queria preguntarte una cosa !! si quiero hacer el lugar de un juego portable, un programa portable !! en la linea de codigo: ;!@Install@!UTF-8! InstallPath="%TEMP%\sky" GUIFlags="32" ExtractTitle="Beneath a Steel Sky" ExtractDialogText="Cargando juego..." ExecuteFile="%TEMP%\sky\dosbox.exe" ExecuteParameters=" -noconsole" ;!@InstallEnd@! dentro de esas lineas de codigo, solo tendria que modificar el nombre de la carpeta si quiero y el nombre del ejecutable !!! o que es lo que tengo que modificar o agregar, pues intente y con un programa pero cuando compilo el .exe me da error !!!
Responder Permalink URL · Opera 9.80 · Windows XP ·
Manuel Manuel Miércoles, 12 de mayo de 2010, 16:54
13
Muy bueno no sabes cuanto me ha servido el tutorial y acerca que otros digan que con winrar es mas facil es cierto pero, pero tambien muy limitado en cambio con este metodo puedes obtener mejores resultados a tu propio gusto y con un mejor ratio de compresion, con esto es mas que suficiente para preferir este metodo, pero a por mi parte me gusta por para usarlo tuveque aprender nuevas cosas :D
Responder Permalink K-Meleon 1.1.3 · Windows XP ·
Miguel Miguel Jueves, 12 de agosto de 2010, 14:08
14
Muchas Muchas Muchas gracias!! No te imaginas lo que este artículo me sirvió!! Infinitas gracias!! Saludos.
Responder Permalink Mozilla Firefox 3.6.8 · Windows XP ·
Luis Luis Miércoles, 1 de septiembre de 2010, 16:38
15
buen aporte, gracias lo probare..!! gracias..!!
Responder Permalink Internet Explorer 8.0 · Windows XP ·
Luffi Luffi Viernes, 15 de octubre de 2010, 07:03
16
para que el EXE no de error deben quitar esta linea ExecuteParameters=" -noconsole""
Responder Permalink Mozilla Firefox 3.6.10 · Windows 7 ·
Pedro Pedro Jueves, 25 de noviembre de 2010, 09:28
17
Cuando ejecuto el sfx.exe en un ordenador diferente a aquel en que fue creado, da un mensaje de error, porque va a buscar ficheros a C: ¿Cómo lo soluciono?
Responder Permalink Mozilla Firefox 3.6.12 · Windows 7 ·
Senpai Senpai Sábado, 8 de octubre de 2011, 14:20
18
Hola: Hasta ahora he creado mis portables con Winrar, aunque me gustaria crearlos con 7zip, pero no soy capaz de hacerlo a pesar de tu buen tutorial, ¿te importaría hacerme/explicarme un ejemplo? Hago el portable de CCleaner, con 2 archivos (ccleaner.ini, CCleaner.exe, y la carpeta "Lang" con solo el archivo de idioma español, ¿como serían los pasos para crear el portable? Gracias
Responder Permalink URL · Mozilla Firefox 5.0.1 · Windows XP ·
Alexander Alexander Jueves, 22 de diciembre de 2011, 15:41
19
Hola, excelente explicación me sirvió mucho. Ahora tengo una duda, he buscado por todos lados y no consigo esa opción. En WinRar uno puede configurar el autoextraible para que se ejecute como administrador, ¿Como lo hago con 7-zip? Realmente me encanto lo configurable que es este programa pero necesito ha juro que se ejecute como administrador para que funcione correctamente el programa mio. Claro que si le doy con el botón derecho al abrir y le doy a la opción ejecutar como administrador me funciona, pero no es lo ideal ya que lo van a usar otras personas que no entienden nada de eso, por lo tanto necesito que se ejecute como administrador cuando lo abran. Ayúdenme con eso por favor, si WinRar lo tiene, 7-zip debería también.
Responder Permalink Mozilla Firefox 8.0.1 · Windows 7 ·
Interesante
Alexander Alexander Sábado, 24 de diciembre de 2011, 16:49
20
@Alexander: Lo resolví por pura intuición, subo la solución por si alguien más le sirve. Lo que hice fue abrir el programa con Resource Hacker (el de cambiar los iconos), y salen unas carpetas con las propiedades del programa, fui a la que dice ?24?, y después ?o? y aparece un script de la configuración del programa, cambie donde dice: < requestedPrivileges > < requestedExecutionLevel level="asInvoker" uiAccess="false"/ > < /requestedPrivileges > Por: < requestedPrivileges > < requestedExecutionLevel level="requireAdministrator" uiAccess="false"/ > < /requestedPrivileges > Di clic arriba donde dice Compile Script , guarde y listo, ya el programa se ejecuta como administrador.
Responder Permalink Mozilla Firefox 8.0.1 · Windows 7 ·
Adolfo Adolfo Domingo, 19 de febrero de 2012, 23:03
21
muy interesante, es como preparar archivos para la instalación de algun programa pero en lugar de ello se pone aplicaciones y se ejecutan despues de descomprimilas, cuando se cierra esta aplicación los archivos descomprimidos se eliminan pues esta es la naturaleza de los archivos SFX, me gustaria saber si es posible hacer para que en lugar de eliminarlos o antes de eliminarlos los recomprima y actualice los antiguos comprimidos para asi de esta forma actualizar algun cambio es su configuración.
Responder Permalink Mozilla Firefox 10.0.2 · Windows XP ·
Nande Nande Jueves, 22 de marzo de 2012, 03:15
22
sos groso sabelo. yo vine solo por el config.txt
Responder Permalink URL · Opera 9.80 · Windows XP ·
Yohnah Yohnah Miércoles, 14 de noviembre de 2012, 10:49
23
Si queréis crear los sfx desde GNU/Linux (osea, crear los .exe para windows desde linux) el comando sería 7z a -sfx test.exe test.txt Solo que si lo hacéis así sin más, el .exe creado realmente es un fichero ELF. Para paliar este problema, lo único que hay que hacer es coger desde el 7zip de windows coger el fichero 7zip.sfx y copiarlo en el directorio de vuestra distribución (en ubuntu sería /usr/lib/p7zip/ Y luego el comando a ejecutar 7z a -sfx7.sfx test.exe test.txt Lo que no he probado es la personalización como indica Manz, supongo que se puede hacer exáctamente igual, crear el archivo.7z y el fichero config.txt y finalmente ejecutar cat 7zsd.sfx config.txt contenido.7z > sfx.exe Pero no lo he probado. Lo que faltaría es el tema de la personalización del icono, que no se como hacerlo (y tampoco me he puesto a investigarlo).
Responder Permalink URL · Mozilla Firefox 16.0 · Windows 7 ·
David David Martes, 11 de diciembre de 2012, 02:57
24
que inutil que soy no me salio, no se que esta mal buu ayuda
Responder Permalink Mozilla Firefox 14.0.1 · Windows 7 ·
MMn MMn Miércoles, 19 de diciembre de 2012, 00:01
25
@David: Busca en la pagina oficial, algunos parametros estan obsoletos.
Responder Permalink Mozilla Firefox 17.0 · Windows 7 ·
gucaza Jueves, 10 de enero de 2013, 05:57
26
hola saludos, consulta se puede convertir 7zip * volumenes a exe? en el winrar si se puede, esto porque el archivo es grande 4.25Gb
Responder Permalink Mozilla Firefox 17.0 · Windows 8 ·
Trankten Trankten Domingo, 9 de junio de 2013, 00:02
27
Después de leer tu artículo me ha servido de inspiración para una herramienta similar para hacer portables juegos de plataformas antiguas de otros sitemas. Lo he publicado en http://www.trankten.com/sega/ Muchas gracias!
Responder Permalink URL · Chrome 27.0.1453.110 · Windows 8 ·
Juanjo Ironforge Juanjo Ironforge Lunes, 9 de septiembre de 2013, 15:47
28
Latino copiando articulo para colgar en Taringa en 3... 2... 1... Gran post Manz. La verdad es que tenía yo ganas de saber como crear un portable, que me viene bien para preparar aplicaciones tipo CCleaner o Recuva en el pendrive y llevarlo más comodamente en el trabajo.
Responder Permalink URL · Chrome 27.0.1453.93 · Linux ·
JuanK JuanK Viernes, 20 de septiembre de 2013, 07:59
29
@Trankten: He pasado por la pájina que citas y muy interesante esto que estás haciendo!! Me fascinaría poder jugar un Soul River por esta metodolojía y es que parece que así no se daña el rejistro de Windows...... Ya aparte (pero relacionado) quizás encontrar, por pura nostaljia, un juego de carritos similares a los fórmula 1, completamente plano en una pista de apenas dos carriles que pasaba por la mitad de la pantalla y sin ninguna perspectiva, si los carros pasaban por manchas de aceite se deslizaban, si entraban a zonas oscuras se encendían las luces delanteras, era de lo más sencillo pues sólo había que adelantar a los otros carros, pero no recuerdo ni el nombre ni si fue Sega, Konami o Atari, etc los que lo sacaron....
Responder Permalink Mozilla Firefox 20.0 · Linux ·
Trankten Trankten Miércoles, 16 de octubre de 2013, 17:32
30
@JuanK: No tengo ni idea, no he jugado a juegos de coches por aquella epoca, me dio por jugar a ellos después! Recuerdo un juego para DOS que se llamaba "Super Speed" que tiene caracteristicas similares a lo que comentas. ?‰chale un vistazo a este: http://www.ellosnuncaloharian.com/super-speed/ Saludos y gracias por probar mi herramienta de Sega Portable, efectivamente como dices, no deja registro alguno en Windows, está hecho con herramientas para precisamente funcionar sin necesidad de registro ni administrador, ideal para dias aburridos en el trabajo :)
Responder Permalink Mozilla Firefox 13.0.1 · Windows 7 ·
Edison Edison Miércoles, 29 de enero de 2014, 01:38
31
tambien se puede crear en IExpress?
Responder Permalink Chrome 32.0.1700.76 · Windows 8.1 ·
JhonnFreeman JhonnFreeman Miércoles, 12 de marzo de 2014, 02:50
32
Genial el articulo me ayudo mucho a la hora de crear copias de seguridad autoextraibles ;D muchas gracias
Responder Permalink URL · Chrome 33.0.1750.146 · Windows 7 ·
Publica tu opinión



Acepto las condiciones y políticas de privacidad de este sitio web.
Suscribirme a través de FeedBurner a los nuevos artículos del blog por email.

Previsualización

Aquí se previsualizará su comentario. Revise que sea correcto antes de publicarlo.