Pregunta

Necesito llamar a un archivo VBScript (extensión de archivo .vbs) en mi aplicación C # para 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 detrás. ¿Cómo hacer esto?

¿Fue útil?

Solución

El siguiente código ejecutará un script VBScript sin indicaciones ni errores y sin el logotipo de la shell.

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

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

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 StartInfo le dará acceso bastante granular a la configuración del proceso.

Debe usar Windows Script Host si desea que se muestren ventanas, etc. El programa de script. También puedes intentar ejecutar cscript directamente, pero en algunos sistemas solo lanzará el editor :)

Otros consejos

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

Deberá corregir cualquier diferencia entre VBScript y VB.NET (deben 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 con el nivel de permiso más alto para hacer esto en 2008. La Identidad debe ser Administrador.

¿Quieres decir que intentas ejecutar un archivo vbs desde C #?

Se puede hacer como ejecutando cualquier otro programa desde el código C # :

Process.Start(path);

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

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

Para el beneficio de los usuarios, encontré esto post , que da una respuesta clara (especialmente si tiene 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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top