Comunidad de diseño web y desarrollo en internet online

Ejecutar una BAT file con AIR 2.0

Después de romperme la cabeza haciendo un gestor de descargas para una aplicación para kioscos interactivos, mi aplicación era capaz de descargar, filtrar y gestionar archivos XML, verificar la licencia de uso, hacer descargas inteligentes de archivos multimedia desde un servidor ASP y guardarlas en el disco duro local en una carpeta personalizada para ese fin.

Pero dónde me tope un muro casi impenetrable de desesperación, es cuando intente que mi aplicación hiciera comandos del sistema operativo para realizar algunas tareas sencillas

¿Ejemplo? Borrar los archivos temporales de internet. Y es que Flash Player e incluso AIR utilizan este servicio de Internet Explorer aún cuando se ejecutan fuera del mismo. Para que mi gestor de descarga estuviera completo necesitaba borrar estos archivos de forma transparente al usuario.

Después de leer muchas cosas raras caí en cuenta que nadie en todo el maldito internet sabía cómo hacerlo. Tuve que resolver el problema yo solito, por eso decidí compartir la solución con ustedes.

Atención: Este tutorial es para Flash Profesional CS5 o Flex, particularmente prefiero la versión de Flash Profesional CS5 pero cada quien se acomoda como puede.


No uses versiones beta de Flash CS5 para AIR 2.0


En primer lugar debemos estar muy seguros que nuestra versión de CS5 no es un Beta. Ka versión Beta de CS5 no soporta AIR 2.0. AIR no nos permitirá instalar nuestra aplicación y nos dará un error como éste:

Código :

“Error de instalación, AIR no es capaz de instalar
<Nombre de la aplicación > Debido a que no cumple con
los requisitos del sistema y no hay una actualización
disponible” 

Lo que este error nos dice es que la versión Beta (2.beta2) de AIR disponible en CS5 Beta no es compatible (y nunca lo será) con versiones de AIR actualizadas (La 2.6 me parece). Desafortunadamente muchos tienen instalado esta versión de CS5 por que fue la que se utilizó en versiones pirata que circulan por internet.

Si tienes este problema instala una copia legal o una demo desde Adobe y te quitarás muchos dolores de cabeza.

Código en actionscript 3


Siguiendo con el tema, necesitas importar la siguiente clase a tu código:

Código :

import flash.filesystem.File;

Para ser capaces de utilizar las funcionalidades de esta clase debemos importarla también al panel preferencias de ActionScript 3.0 ( File-> ActionScript Setings 3.0 ) y dar click en Library Path.

Debemos añadir las librerías: aircore.swc y airGlobal.swc ambas deben tener Merged into code activado.

Dale click a Browse to SWC File y ve a la siguiente carpeta:

Código :

C:\Program Files\Adobe\Adobe Flash CS5\AIK2.0\frameworks\libs\air
Teniendo esto listo, crea una aplicación (EXE) que ejecute tu archivo BAT y es más sencillo de lo que suena,

Crear una aplicación .EXE de AIR que ejecute archivos .BAT


  • Abre el block de notas y escribe tu comando en DOS:

    Código :

    RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8

  • Salva tu archivo como una extensión Bat
  • Crea un acceso directo a tu Bach file y ponle en propiedades “iniciar miminizado”
    eso evitará la fea ventana de DOS.
  • Comprime ambos archivos usando WinRar y crea un ejecutable con icono propio incluso si quieres y haz que ejecute automáticamente el acceso directo a tu Bach file.
  • Prueba que funcione y guárdala en una carpeta no bloqueada por el sistema operativo.
  • En Flash debes tener las siguientes precauciones:
    • En AIR settings el profile EXTENDED DESKTOP debe ser el único seleccionado
    • y Windows Installer debe estar activado.

  • El código para que esto funcione es simple:

    Código :

       if(NativeProcess.isSupported) { trace("NativeProcess es soportado."); 
    
          var file:File = AP.resolvePath("borrarCache.exe");//Este debe ser un directorio válido
    
          var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
          nativeProcessStartupInfo.executable = file;     
          var process:NativeProcess = new NativeProcess();      
          process.start(nativeProcessStartupInfo); 
          }else{trace("NativeProcess no es soportado.");};//NativeProcess.isSupported


Eso es todo, espero haberles ayudado.

Hasta la próxima.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate