Este tutorial os enseña cómo podeis convertir vuestros programas preferidos en portables, o sea, en programas que pueden ser usados sin necesidad de instalar previamente en el ordenador.
El tutorial lo creé y lo posteé originalmente en P2Pnews y ahora lo traslado aquí para vuestro disfrute y provecho. Creo que este es el único tutorial en castellano que existe, o al menos yo no he visto otro. Me gustaría que si conocierais alguno más me lo indicarais, por favor.
El tutorial se compone de dos partes: una parte teórica (que es esta) donde os mostraré a grandes rasgos la técnica para hacer programas portables; y otra parte práctica (que iré publicando poco a poco) en donde se detallarán diversos ejemplos de portabilizaciones explicados paso por paso e ilustrados mediante capturas de pantalla, y en la que vereis reflejado de forma práctica todo lo que se explica en esta primera parte.
Bueno, comencemos el tutorial. Lo primero es disponer de las herramientas necesarias para hacer las portabilizaciones. Estas son las que yo utilizo:
Universal Extractor
Este herramienta te permite extraer los archivos de un fichero comprimido en cualquier formato (ZIP, RAR, 7Z, etc) y de programas de instalación genéricos (NSIS, Inno Setup, msi, etc). Puedes instalarte el programa desde formato ZIP con lo que obtienes todos los binarios (shell y extractores), aunque yo te recomiendo hacerlo desde el Setup ya que te añade en el menu contextual una muy práctica opción "UniExtract Files..." que te hará muy cómodo manejar el programa.
Total Uninstall
Este programa monitoriza la instalación de un programa para poder hacer posteriores desinstalaciones limpias y completas. Lo que hace es guardar imágenes del sistema antes y después de la instalación, para hacer comparativas y marcar los cambios. Así obtienes información completa sobre los cambios que se hayan producido en el sistema de archivos copiados al disco duro y los cambios realizados en el Registro Windows (que además se puede exportar en formato .reg) y para hacer protabilizaciones es fundamental esta información.
Regmon y Filemon
Regmon monitoriza los cambios que se producen en el Registro Windows en tiempo real, así detectaremos si durante la ejecución de un programa este hace algún cambio en el Registro.
Filemon monitoriza toda la actividad de los archivos que están siendo utilizados por el sistema operativo en tiempo real.
AÑADIDO: Se han unificado ambos programas en uno solo y ahora se denomina ProccessMonitor , pero la funcionalidad es la misma.
UPX
Es un empaquetador de ejecutables gratuito, portable y con una muy buena tasa de compresión y velocidad de decomprensión. Comprime tanto programas .exe como .com, .dll, .sys, .ocx, .dpl, .bpl, .scr, .acm, .ax. El programa se utiliza mediante línea de comando, con una serie de opciones que te permiten personalizar las funciones del mismo, pero existen shells que lo hacen más fácil de manejar como UPX Shell, Mass Compressor, etc.
WinRar
Lo utilizo para hacer programas portables de un archivo único autoextraible (Rar-SFX).
Icon sushi
Programa para extraer facilmente los iconos de archivos exes y dlls.
Bien. Una vez dispongamos de las herramientas necesarias, y antes de ponerse manos a la obra, hay que analizar el tipo de programa que vamos a convertir en portable, ya que dependiendo de su fisionomía y funcionamiento deberemos actuar de una manera u otra.
* * * * * * *
En una primera clasificación estarían los programas compuestos por un archivo único y los programas que se componen de varios archivos.
Programas de un archivo único
Estos programas son generalmente ya de por sí portables (excepto algunos casos aislados como Foxit PDF Reader que a pesar de ser un archivo único, viene encapsulado en un instalador). A este tipo de programas solo cabría comprimirlos con el compresor UPX para que 'pesen' menos y ya está.
Aunque habría también que vigilar si el programa realiza alguna modificación en el Registro Windows durante su ejecución, y si es así dotarle de medios para poder eliminar las modificaciones realizadas al finalizar el programa.
Programas con varios archivos
Por lo general la mayoría de los programas vienen acompañados de varios archivos que complementan al archivo principal. Algunos de estos archivos complementarios son totalmente innecesarios y los podemos eliminar sin mayor problema. Me refiero a archivos .txt, módulos de desinstalación, archivos de lenguaje que no vamos a utilizar, etc. También podríamos probar a eliminar otros archivos e ir comprobando si el programa se mantiene estable y funcional.
Generalmente los programas compuestos de varios archivos suelen venir encapsulados en un instalador que es lo que trataremos a continuación.
* * * * * * *
En una segunda clasificación estarían los programas que vienen sin instalador y los programas que viene encapsulados en un instalador, entendiendo como instalador un lanzador que contiene el programa en sí y lo instala en el sistema. Este instalador suele venir en forma de archivo ejecutable .exe o en el formato de Microsoft .msi y se suelen denominar Setup, Install, etc.
Programas sin instalador
Estos programas son también practicamente portables ya que no suelen realizar modificaciones en la configuración del sistema. No obstante, os recuerdo que pueden realizar modificaciones indeseadas en el Registro durante su ejecución, o crear/modificar archivos en el disco duro. Esto debería comprobarse con Regmon y Filemon.
A este tipo de programas solo se le podrían realizar operaciones de compresión y/o empaquetamiento en un archivo único mediante UPX y WinRar, o análogos.
Programas con instalador
Los programas encapsulados en un instalador sí suelen realizar modificaciones en el Registro Windows y además debemos extraerlos del instalador, por lo que este tipo de programas son nuestro objetivo principal a la hora de portabilizar.
El proceso de portabilización que empleo yo es el siguiente:
1- Probamos extraer los archivos del instalador usando UniExtract.
Si Uniextract no consigue extraerlos entonces saltamos al paso nº 5.
2- Si conseguimos extraerlos observaremos que se habrá creado una carpeta conteniendo todos los archivos que incluía el instalador. Entramos dentro de esta carpeta y vemos lo que hay ahí...
3- Dependiendo del programa instalador nos podemos encontrar diferentes cosas. Por ejemplo, en los instaladores NSIS nos encontraremos un archivo .iss que es el script de instalación que podemos eliminar, ya que aunque podríamos analizarlo para dilucidar lo que el instalador hace, es algo complejo de entender y existen métodos alternativos más claros para obtener esa información. También encontraremos una carpeta llamada embedded que podemos eliminar ya que contiene elementos propios del instalador como gráficos, idioma, etc y no nos va a servir de nada. Y también nos encontraremos una carpeta llamada {app}, dentro de la cual se encuentra el programa que vamos a portabilizar.
Es posible que también nos encontremos otras carpetas llamadas {sys} o {win}. En esos casos ya se hace más problemática la portabilización, ya que en esas carpetas hay controladores necesarios para el correcto funcionamiento del programa y que se instalan en el directorio de Windows. Pero eso veremos más adelante.
4- Supongamos que solamente existe una carpeta {app}. Entramos dentro de la carpeta {app} y ejecutamos el programa. ¿Funciona bien? Si es así, realizamos una limpieza de archivos innecesarios (txt y demás) y lo tratamos como si fuera un programa sin instalador como hemos descrito antes. Fin del proceso.
Si no funciona bien es porque el instalador realiza algunos cambios en la configuración del sistema para que el programa funcione bien y debemos averiguar cuales son esos cambios. Para ello utilizaremos la técnica descrita en el siguiente paso.
5- Si no conseguimos extraer el programa del instalador o si, aunque conseguimos extraerlo, no conseguimos hacer que funcione, entonces usaremos el programa Total Uninstall.
Este programa monitoriza todo lo que hace el instalador. Así podremos ver de forma clara qué archivos copia en nuestro sistema y dónde, y qué cambios realiza en el Registro de Windows o en otros archivos de configuración de Windows; con la ventaja añadida de que después podemos hacer una desinstalación limpia y completa del programa, ya que deshace todo lo hecho por el instalador.
Tras la instalación del programa mediante TotalUninstall, revisamos el log devuelto, tomamos nota de dónde se encuentran todos los archivos del programa instalados y exportamos los cambios en el Registro en formato .reg (que es el formato oficial reconocido por los programas Reg y RegEdit).
6- Copiamos los archivos del programa instalados en el sistema en una carpeta creada exproceso y posteriormente desinstalamos el programa mediante Total Uninstall para que no quede ningún rastro del programa en nuestro sistema.
7- Ahora haremos una copia del archivo .reg para no perder el original y comenzaremos a depurarlo eliminando aquello que sea superfluo e innecesario para lograr una mayor claridad.
Hay quien no depura el reg y lo mete tal cual en el Registro Windows antes de la ejecución del programa. Eso queda poco "profesional", es mucho más elegante revisarlo y depurarlo, que no es tan difícil como parece.
8- Al igual que montamos el reg hay que crear un anti-reg, es decir, un archivo .reg que va a eliminar todos los cambios que genere el primer reg. No se si me he explicado bien.
Otro buen consejo es que cuando se vayan a realizar cambios en alguna rama del Registro, hagamos primero una copia de seguridad de esa rama, para poder restaurar los valores previos tras la ejecución del programa. Esto lo entendereis mejor con un ejemplo.
Imaginaos que tenemos instalado en nuestro ordenador el programa Nero versión 6 y ejecutamos el Portable Nero versión 7. Un mal portabilizador puede no tener en cuenta esto y puede machacar las claves del Nero 6, o incluso después de ejecutarse Nero 7 puede optar por eliminar directamente la rama HKLM/Ahead. Imaginaos el desastre! Te inutiliza tu versión instalada en el equipo. Seguramente os ha pasado alguna vez que después de probar un portable, no podeis utilizar la versión que teniais previamente instalada en el ordenador. A que os ha pasado alguna vez? A mi si.
La copia de seguridad es muy sencilla de implementar.
En vez de hacer como hacen algunos
- REGEDIT regprograma.reg <--- para meter el nuevo reg
- Programa.exe <--- ejecuta el programa
- REGEDIT /remove regprograma.reg <--- para eliminar el reg
Queda más elegante hacerlo así
- REGEDIT /E backup.reg "HKEY_LOCAL_MACHINErama" <--- para hacer una copia de seguridad
- REGEDIT regprograma.reg <--- para meter el nuevo reg
- Programa.exe <--- ejecuta el programa
- REGEDIT /remove regprograma.reg <--- para eliminar el reg
- REGEDIT /S backup.reg <--- para restaurar los valores previos
Esta es desde luego la parte más delicada de una portabilización. Si lo hacemos bien, nuestro portable se distinguirá por ser un buen programa portable. Si la hacemos mal, será un programa mediocre y nuestra reputación como portabilizador caerá por los suelos. Vale la pena esforzarse en este apartado.
9- Una vez tenemos el reg bien ajustado y con él el programa funciona perfectamente, debemos crear un lanzador o automatizador para que haga esos cambios necesarios en el sistema y luego pueda restaurarlo a su estado anterior.
Lo podemos hacer con un simple archivo .BAT, o podemos usar el programa AutoIt para crear un programa .exe que queda más elegante y nos permite mayor potencia para realizar otras funciones.
* * * * * * *
Aún quedaría por ver una tercera división de programas:
Programas que no instalan controladores
Que son los que hemos estudiado hasta ahora y que como podeis ver no son tan difíciles de portabilizar.
Programas que instalan controladores
Os acordais que antes hemos dicho que al extraer los archivos de un instalador podemos encontrar carpetas {sys}, {win}, $SYSTEM, etc? Dentro de esas carpetas hay drivers o controladores que se instalan generalmente dentro del directorio Windows y que son utilizados por el programa.
Lo que debemos hacer es 'recolocar' estos archivos en otra carpeta que no sea la de Windows pero que el programa pueda encontrar facilmente estos controladores. Esto se consigue 'registrando' los controladores de esta manera: regsvr32 /s controlador.dll.
Los controladores también pueden estar apuntados por claves en el Registro de Windows o puede estar apuntados por el propio programa. En el registro es facil modificar su ruta, pero si están apuntados por el programa podemos utilizar programas como ResHack para encontrar la cadena de texto que indica la ruta de los controladores y podemos sustituirla por la nueva ruta que elijamos nosotros.
* * * * * * *
Y una última consideración a tener en cuenta: Hay que ver si el programa es freeware, crackeado o si viene con número de licencia. Los dos primeros se tratarán igual mientras que el tercer tipo habrá que meter la clave, ya sea directamente en el Registro de Windows o mediante algún sistema de automatización.