¿Cómo llamar a un archivo VBScript en una aplicación C #?

Necesito llamar a un archivo VBScript (extensión de archivo .vbs) en mi aplicación C # Windows. ¿Cómo puedo hacer esto?

Hay un complemento para acceder a un archivo VBScript en Visual Studio. Pero necesito acceder al script en el código de atrás. ¿Como hacer esto?

El siguiente código ejecutará una secuencia de comandos de VBScript sin indicaciones ni errores y sin un logotipo de shell.

System.Diagnostics.Process.Start(@"cscript //B //Nologo c:\scripts\vbscript.vbs"); 

Una técnica más compleja sería usar:

 Process scriptProc = new Process(); scriptProc.StartInfo.FileName = @"cscript"; scriptProc.StartInfo.WorkingDirectory = @"c:\scripts\"; //<---very important scriptProc.StartInfo.Arguments ="//B //Nologo vbscript.vbs"; scriptProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; //prevent console window from popping up scriptProc.Start(); scriptProc.WaitForExit(); // <-- Optional if you want program running until your script exit scriptProc.Close(); 

El uso de las propiedades de StartInfo brindará acceso bastante detallado a la configuración del proceso.

Debe usar Windows Script Host si desea que el progtwig de script muestre ventanas, etc. También podrías intentar simplemente ejecutar cscript directamente, pero en algunos sistemas simplemente lanzará el editor 🙂

Otro enfoque es crear un proyecto de biblioteca de clase VB.NET, copiar el código de VBScript en un archivo de clase VB.NET y hacer referencia a la biblioteca de clases VB.NET desde su progtwig C #.

Necesitará reparar cualquier diferencia entre VBScript y VB.NET (deberían ser pocas).

La ventaja aquí es que ejecutará el código en proceso.

Este es un problema de permisos. Su aplicación appPool debe ejecutarse en el nivel de permiso más alto para hacer esto en 2008. La identidad debe ser Administrador.

¿Quiere decir que intenta ejecutar un archivo vbs desde C #?

Se puede hacer como ejecutar cualquier otro progtwig desde el código C # :

 Process.Start(path); 

Pero debe asegurarse de que no solicitará nada, y se está ejecutando con la versión de línea de comando del intérprete:

 Process.Start("cscript path\\to\\script.vbs"); 

Para el beneficio de los buscadores, encontré esta publicación , que da una respuesta clara (especialmente si tienes parámetros). Lo he probado, parece funcionar bien.

 string scriptName = "myScript.vbs"; // full path to script int abc = 2; string name = "Serrgggio"; ProcessStartInfo ps = new ProcessStartInfo(); ps.FileName = "cscript.exe"; ps.Arguments = string.Format("\"{0}\" \"{1}\" \"{2}\"", scriptName, abc, name); //This will equate to running via the command line: // > cscript.exe "myScript.vbs" "2" "Serrgggio" Process.Start(ps);