Como compilar un .exe a partir de un script VB sin Visual Studio con vbc.exe
Para compilar un .exe a partir de un script, necesitamos un compilador, el problema aparece cuando no tenemos disponible ninguno comercial, con un interface amigable etc.
Desde que .Net Framework apareció, tenemos una posibilidad gratuita para poder compilar, eso sí, no todo el mundo conoce como hacerlo funcionar, Intentaré explicarlo paso a paso.
1.- Para poder compilar necesitamos instalar alguna version de .Net Framework. Una vez instalada, verificaremos que venga el compilador (Vamos a usar como ejemplo el compilador de VBS / VB Visual basic o como querais llamarlo. En esta caso es el VBC.exe, es un interfaz de comandos muy potente.
2.- Adaptar el script para su compilación: A la hora de adaptar el script, tenemos que tener en mente, que debe disponer de al menos un modulo principal (main Module), y una rutina principal (Sub Main). En muchas ocasiones, al sub principal cuando hacemos un vbs no lo definimos de forma explícita, pero para compilarlo hay que hacerlo, con Sub Main ( parametros) y end sub para cerrar el bloque principal (las funciones y métodos adicionales no están incluidos entre estos dos tags, solo la función principal. Una vez hecho esto, en la primera linea ponemos Module MainModule y al final del todo end module (si hay módulos adicionales, estarán fuera de esto, pero en un script no es habitual.
3.- Ejecución del compilador, abriendo una consola de comandos, vamos a la ruta del compilador, por ejemplo:
cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\
y luego compilamos con:
vbc /main:MainModule
4.- Revisar adaptaciones necesarias, en pantalla se volcará toda la información de compilación de errores, que habrá que tratar poco a poco. Hay cosas que no pueden ser utilizadas que sin embargo si funcionan con wscript o con cscript o wsh, y hay otras que provocan un fallo con el interprete de comandos y no con el compilador, y a la inversa (como por ejemplo, wscript.echo no puede utilizarse, pero si sustituyes todas las ocurrencias por MsgBox funcionará sin problemas). Hay que hacer notar, que estamos hablando de lenguaje VB, por lo que por ejemplo, las variables se deben declarar como dim as . Aunque lo mas sencillo es demostrar todo esto con un ejemplo compilable:
Module MainModule
sub main ()
dim strText1 as string
strText1="Ping Pong!"
msgbox (strText1)
end sub
End module
Llama a este fichero compiletest.vbs y guardaló en la ruta anteriormente indicada. Ejemplo de compilación:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>vbc compiletest.vbs /main:MainModule
Microsoft (R) Visual Basic Compiler version 8.0.50727.1433
for Microsoft (R) .NET Framework version 2.0.50727.1433
Copyright (c) Microsoft Corporation. All rights reserved.
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>
El resultado será un compiletest.exe, que cuando lo ejecutes mostrará el dialogo “Ping Pong!”
La idea aquí es, conseguir convertir un script en un ejecutable sin necesidad de tener Visual Studio, para ocultar su código. Esto es muy rudimentario y tiene muchas deficiencias, no hay nada que sustituya un framework de programación y compilación, pero para una tarea puntual, puede ser muy interesante.
En caso de aparecer problemas, suelen ser sencillos de resolver para adaptar un vbscript por ejemplo:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>vbc compiletest.vbs /main:MainModule
Microsoft (R) Visual Basic Compiler version 8.0.50727.1433
for Microsoft (R) .NET Framework version 2.0.50727.1433
Copyright (c) Microsoft Corporation. All rights reserved.
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\compiletest.vbs(5) : warning BC420
20: Variable declaration without an 'As' clause; type of Object assumed.
dim strText1
~~~~~~~~
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\compiletest.vbs(9) : error BC30800
: Method arguments must be enclosed in parentheses.
msgbox strText1
~~~~~~~~
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>
Vereis que se muestran en pantalla los errores, solo hay que seguir las instrucciones para resolverlos.
Espero que os sea de utilidad!