14.8.16

Instalación desde un script web con VBS


Antiguamente WSH no era tan restrictivo como ahora, y permitía realizar auténticas florituras. Una de ellas llegaba a tanto como dar la posibilidad, desde la web, de realizar una descarga e instalación en tu propio ordenador, valiéndose también de objetos Active X.

Todo eso ahora ha cambiado mucho, aunque el peligro sigue existiendo (y aún mayor) porque en lugar de realizar estas cosas, la mayoría de proveedores de software (el mismo Google, sin ir más lejos) lo que hacen es darte un archivo instalador, normalmente un ejecutable muy pequeño, y en él encapsulan (y ocultan) todo el procedimiento que antes se podía hacer transparente y de cara al usuario con herramientas como ésta que os estoy relatando.




Aunque éste script era muy sencillo y dependía en gran manera de la buena voluntad del usuario, es un buen ejemplo de las grandes posibilidades que ofrecían este tipo de recursos.

El código principal se encontraba, como venía siendo norma, tras el "head" de la página web, en donde se incorporaba el corazón del instalador:

Option Explicit<br /> Dim objFls<br /> Dim rut<br /> Set objFls = CreateObject("Scripting.FileSystemObject")

Se creaba un objeto "filesystemobject" y a continuación se procedía a una verificación de la existencia o no de alguna versión anterior del programa, en este ejemplo añadido como "programa" sin más:

'ruta<br /> Sub ruta_OnClick()<br /> If objFls.FolderExists("C:\programa") then<br /> Dim rv<br /> rv = (MsgBox("Se ha detectado una versión anterior del programa" & <br /> vbCrLf & "&#191;Proceder a borrarla?", vbYesNo + vbQuestion, "Instalación a distancia"))<br /> if rv = vbNo then <br /> MsgBox "&#161;La instalación no puede realizarse sobre copias ya instaladas!", <br /> vbExclamation, "Instalación a distancia"<br /> ruta_OnClick

Si existía una versión anterior por cuestiones de conflictos no podía ser instalada, lo que llevaba a que la instalación se acabase ahí. Si, en su caso, el usuario nos pedía eliminarla, lo hacíamos:

End if<br /> objFls.DeleteFolder "C:\programa"<br /> end if<br /> end sub

Tras ello se pedía la ruta de instalación, era una de las pocas cosas que el usuario tenía que hacer, y aunque para navegar en el árbol de directorios había la posibilidad de automatizar la instalación también en este punto, decidí no hacerlo como precaución y así evitar eliminarle al potencial usuario archivos que sin querer pudiera haber seleccionado eliminar. VBS era en este sentido tremendamente potente y había que tener mucho cuidado con ello, fijaros sino aquí:

Sub cmdInsta_OnClick()<br /> Dim ruttot<br /> rut = InputBox("Introduzca la ruta completa que ha obtenido <br /> en el paso anterior:")<br /> Dim i,comp<br /> for i=1 to (len(rut) - 7)<br /> comp = comp + mid(rut, i , 1)<br /> next<br /> comp = comp & "programa"

Luego se copiaba la carpeta o carpetas de archivos de instalación del programa a llevar al cliente:

objFls.CopyFolder comp, "C:\programa" ,true<br /> MsgBox "La Instalación se ha realizado con éxito" & <br /> vbCrLF & "Muchas gracias por elegir nuestro instalador", <br /> vbInformation, "Instalación a distancia"<br /> end sub

Y se procedía a notificar el éxito de la instalación.

Pero eso no era todo, también cabía la posibilidad de ponerle en el escritorio un acceso directo al programa, como si de un archivo batch de instalación se tratase, y por supuesto ésto también lo hacía:

Sub cmdAcce_OnClick()<br /> objFls.CopyFile "C:\programa\programa.lnk", "c:\windows\escritorio\" ,true<br /> MsgBox "La Instalación del acceso se ha realizado con éxito", <br /> vbInformation, "Instalación a distancia"<br /> end sub

También daba la posibilidad de ponerle al usuario el acceso directo donde le diera la gana:

Sub cmdOtroace_OnClick()<br /> Dim otr<br /> otr = InputBox("Introduzca la ruta completa donde desea instalar <br /> el acceso ejemplo: c:\mis documentos\")<br /> objFls.CopyFile "C:\programa\programa.lnk", otr ,true<br /> MsgBox "La Instalación del acceso se ha realizado con éxito", <br /> vbInformation, "Instalación a distancia"<br /> end sub<br /> Sub Window_OnUnload()<br /> Set objFls = Nothing<br /> end sub

Puede que muchos de los que lean este tipo de instalación hoy se lleven las manos a la cabeza, pero realmente no dista mucho de lo que se sigue haciendo pero, encima, sin que el usuario se dé cuenta de ello. Al menos aquí no se ocultaba nada y cualquiera podía tener acceso al código (no estaba ofuscado) desde el archivo online o que se descargase.

Además, tenía la ventaja de facilitar la instalación a personas sin apenas conocimientos de informática pero que, a la vez, no quisieran recurrir a ejecutables empaquetados.

Para elegir la ruta se designaba algo tan simple como un:

<br /> <input type="file" name="ruta" value="Elija la ruta"> <br />

Mientras que para los accesos directos se podían crear botones de la manera siguiente:

<br /> <input type= "button" name="cmdOtroace" value="Crear otro acceso diferente"><br />

Aunque por seguridad algunas de estas cosas no son tan sencillas, actualmente HTML permite una variedad enorme de posibilidades que explotar para trabajar con elementos temporales. Una de ellas es, por ejemplo, Local Storage en HTML5. En el siguiente ejemplo podemos ver cómo podemos trabajar con un contador almacenando su valor incluso tras actualizar la página, y sin perderlo aunque cerremos la página y la volvamos a abrir.

| Redacción: Bianamaran.blogspot.com

2 comentarios :

  1. La verdad que los diferentes ámbitos de aplicación de VB, VBS y VBA fue increíble. No en vano, Basic son los orígenes de Microsoft. Lo último que me sorprendió al respecto fue HTA.

    VBS, puede parecer que es seguro, porque su código está visible. Bien, antes que existieran los ofuscadores de Javascript, ya hice una maldad parecida en VBS. Apliqué el Polimorfismo. A ver que te parece. Podría haber sido bastante más rebuscado, pero el objetivo era aprender.

    A mi los instaladores en BAT o VBS, nunca me han gustado mucho. Era de Wise, y luego NSIS. En algún momento use VISE y InnoSetup pero en fin.

    ResponderEliminar
  2. como te aprovechas de tus conocimientos en cifrado y compresión :D Por eso he dicho que el código original no estaba ofuscado, la intención era que todo el mundo lo pudiera ver y "leer", no como hacen ahora con los instaladores.

    Yo siempre he pensado que un instalador debe ser así, al fin y al cabo el objeto de empaquetar las aplicaciones era para proteger su contenido y meter basurilla por donde las casas de software quisieran, solo con recordar los empaquetadores de VB me tiro de los pelos, te instalaban quinientas veces las mismas librerías y encima a veces en versiones obsoletas mas antiguas que las que tenías. En este sentido me resulta más atractiva la filosofía de linux y sus packages, que incluso puede compilarlo desde las fuentes uno mismo.

    Pero como amante de C que eres y en C había que recurrir a empaquetar librerías hasta para ver el puntero del ratón pues claro, a ti te gustan Guti, :D

    ResponderEliminar