2008-10-14 71 views

Respuesta

56

El siguiente código ejecutará una secuencia de comandos de VBScript sin indicaciones ni errores y sin el logotipo de la estructura.

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(); 

Usando las propiedades StartInfo le dará acceso muy granular a la configuración del proceso.

Debe usar Windows Script Host si desea que Windows, etc., se muestren mediante el programa de script. También podría intentar simplemente ejecutar cscript directamente, pero en algunos sistemas simplemente lanzará el editor :)

+0

¿Se bloqueará el programa que llama a System.Diagnostics.Process.Start() hasta que el proceso finalice o continuará al dejar el proceso para ejecutarse en segundo plano? – roydukkey

+7

Sí. Por defecto, el programa se ejecutará sin esperar a que el proceso finalice. Sin embargo, System.Diagnostics.Process.Start(). WaitForExit() obligará al programa que realiza la llamada a esperar a que el proceso finalice. – roydukkey

+0

Creo que el nombre del archivo tiene que ser el nombre del archivo. es decir, no cscript – Spock

2

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

Se puede hacer como running any other program from C# code:

Process.Start(path); 

Pero usted tiene que asegurarse de que no va a pedir nada, y que está funcionando con la versión de línea de comandos del intérprete:

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

Otro enfoque es crear un proyecto de biblioteca de clases 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 programa 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.

+0

Sin embargo, utilicé el método de @Ilya anterior: esta fue una manera excelente para probar que mi código vbscript y vb.net estaba produciendo los mismos resultados. – condiosluzverde

3

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.

0

Para beneficio de los buscadores, encontré este 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); 
Cuestiones relacionadas