MarcosBL

Aprendiz de todo, maestro de nada

Windows exe launch from html

O como romperse la cabeza con cosas que supuestamente no pueden hacerse.

Problema 1
El tema es que tengo que lanzar varios exes (demos creadas con Robodemo de Macromedia) desde un documento html que a su vez se lanza desde un autorun de un cd, de forma transparente, es decir, sin que el usuario tenga que pulsar el botón Abrir al lanzarse una descarga de fichero exe potencialmente peligroso. Después de mucho buscar escépticamente he acabado en Whirly Wiry Web, empresa que ha desarrollado una dll freeware que permite lo anteriormente citado, e incluso abrir los mencionados exe (o cualquier tipo de documento en su aplicación asociada) desde páginas web.

Claro que no todo el monte es orégano, antes de poder usarla, hay que meter un par de retoques en el registro del usuario, aunque esto ha supuesto menos problemas gracias al inefable regedit. Tras introducir en el registro las modificaciones necesarias he exportado un fichero .reg…

launchinIE.reg

REGEDIT4

[HKEY_LOCAL_MACHINESOFTWARERockinFewlLaunchinIEApproved]
«url1″=»file:///»

he copiado el launchinIE.dll en la carpeta root del cd… y he generado un .bat que registra dicha dll en el sistema:

abrame.bat

cls
echo off
regedit /s launchinIE.reg
regsvr32.exe launchinIE.dll /s
cls
start index.html
exit

Todo ello combinado con un simple autorun.inf…

[AUTORUN]
ICON=ec.ico
open=abrame.bat

…han conformado una de las soluciones más sucias, puercas y eficientes de mi existencia. El proceso viene siendo tal que…

  • El usuario introduce el cd
  • El autorun.inf se encarga de abrir automáticamente el abrame.bat (el nombre no es al azar, espero que si el usuario ha desactivado la ejecución automática de cds, al menos vea ese abrame.bat y le dé por pulsar en él)
  • El abrame.bat registra la dll en nuestro sistema e introduce su configuración en el registro de windows, permitiendo abrirse a los ficheros que provengan de file:/// (local)
  • El mismo bat lanza el index.html, a partir de donde sale todo el contenido del cd demo que hemos preparado.

Problema 2
Una vez abierto este html hemos de pasarle a la dll la ruta de los ficheros exe, hay que tener el cuenta que si bien conocemos su localización en el cd, no sabemos la letra del cd… solucionado con un par de funciones en javascript:

function launchAppAbsolute(strCmdLine)

{

var obj = new ActiveXObject(«LaunchinIE.Launch»);

obj.LaunchApplication(strCmdLine);

}

function launchAppRelative(strCmdLine)

{

var obj = new ActiveXObject(«LaunchinIE.Launch»);

temp=location.href.indexOf(«:»,5);

drive=location.href.substring(temp+1,temp-1);

obj.LaunchApplication(drive + «//» + strCmdLine);

}

Ya podemos lanzarlos de forma absoluta y relativa… y efectivamente todo funciona sin problemas.

Claro que…

Problema 3

Algunas partes del html del cd muestran flash… que pasa si nuestro usuario no dispone del plugin de flash ?

Una mirada rápida al código html standard que descarga por nosotros el plugin nos permite ver que le facilita al navegador una url y un fichero .cab de instalación de windows…

codebase=»http://download.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=6,0,0,0″

Ha sido tan simple como descargar el fichero cab, colocarlo en la root del cd, y cambiar el código a algo un poco más… «local»

codebase=»./swflash.cab#version=6,0,0,0″

En el desarrollo de este cd he usado…

  • 1 alta dosis de «Da lo mismo, asi funciona siempre»
  • Internet Explorer como contenedor de la demo
  • Macromedia Flash para el menú inicial
  • launchinIE.dll para la interacción navegador-ejecutables
  • Javascript para cambiar el tamaño del flash y lanzar la dll
  • Regedit para editar el registro y poder pasar los valores a la dll
  • Modificaciones al código de descarga de los plugins de Flash
  • 1 cajetilla de Chesterfield americano
  • +/- 1 litro de café negro

Moralejas

Al menos durante un rato he recordado porqué me gusta mi trabajo.
Espero que a alguien le sirva de algo la launchinIE.dll

2 comentarios en “Windows exe launch from html

Comments are closed.