Ejecutar VBScript en VB.NET "On The Fly"

Iniciado por elmaro, 19 Marzo 2009, 21:21 PM

0 Miembros y 1 Visitante están viendo este tema.

elmaro

Buenas a todos.
Ese es mi problema, ejecutar un vbscript en vb.net al vuelo.

Se puede hacer mediante archivos temporales, pero lo que a mi me interesa es crear una función en vbscript y poder ejecutarla desde mi aplicación, obviamente recuperando el resultado de esa función.

Si alguno me puede ayudar se lo agradecería.

Saludos

Mr. Crowley

Cree el objecto FileSystemObject, o el que desee utilizar.. y listo!  ;D
Mi blog personal: www.calirojas.com

KJD

No conozco mucho de VBscript, pero en VB.net tenes la clase VBCodeProvider que te permite compilar y ejecutar codigo dinamicamente, osea en memoria si generar exe ni dll.

En este link tenes ejemplos en c#, pero podes pasarlo a vb facilmente solo recorda usar VBCodeProvider en vez de CSahrpCodeProvider.


http://www.codeproject.com/KB/dotnet/DynamicCompileAndRun.aspx
"Solo hay 10 tipos personas que saben leer binario, los que si y los que no"

"Keyboard not Found, press F1 To Continue" WTF???

elmaro

KJD muchas gracias por el link. Entre hoy y el lunes voy a estar haciendo pruebas con el tema.
En cuanto tenga noticias posteo los resultados.

Gracias.-

Novlucker

Ahora no tengo el .NET en la pc, pero revisa si entre los objetos que se pueden agregar no hay uno de nombre "Windows Script Host Object Model" o similar, con eso debería de bastar  :P

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

elmaro

Novlucker pero con WSH tengo que poner la ruta del script. O acaso puedo hacerlo en el aire tambien?


Novlucker

WSH es Windows Script Host, comprende VBS, JS y WMI, y solo tienes que incrustar el code del vbs en tu código VB y ya, no se crea ningún archivo  :P

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

elmaro

Novluckers te comento que es lo que quiero hacer.

Mi aplicación utiliza sus propias variables. Una de las opciones es asignarle valores a esas variables.
Lo que quiero hacer es que el usuario escriba una función en VBS (la cual se guarda en una DB) y llegado el momento de usar esa variable que mi aplicación ejecute esa función escrita por el usuario y obtenga el retorno de la misma.
Me explico? Maso o menos es así la cosa.

elmaro

Bueno tengo este código de ejemplo. El inconveniente ahora es como recuperar los datos.

Imports IWshRuntimeLibrary

Dim host As New MSScriptControl.ScriptControlClass
Dim Cod As String

host.Language = "VBScript"

Cod = "Function Test(nombre)" & vbCr
Cod += "getname= mid(nombre,1,instr(nombre,""|"")-1)" & vbCr
Cod += '"Msgbox(getname)" & vbCr
Cod += "End Function"

host.AddCode(Cod)
host.Run("Test", "mariano|malomo")


Así me devuelve un resultado en un msgbox de vbs. Pero quiero que lo devuelva a una variable así puedo utilizar ese resultado.
Sigo investigando.


elmaro

#9
Listo. Solucionado.
Dejo el codigo

   Dim host As New MSScriptControl.ScriptControlClass
        Dim Cod As String
        Dim ret As String

        host.Language = "VBScript"

        Cod = "Function Test(nombre)" & vbCr
        Cod += "getname= mid(nombre,1,instr(nombre,""|"")-1)" & vbCr
        Cod += "Test = getname" & vbCr '"Msgbox(getname)" & vbCr
        Cod += "end function"

        host.AddCode(Cod)
        ret = host.Run("Test", "mariano|malomo")

        MsgBox(ret)