Ejecutar Script

27/05/2005 - 17:28 por Víctor | Informe spam
Hola

necesito ejecutar un script desde c#. El contenido de un fichero que
contiene código para mostrar el cuadro de apagado de windows es el
siguiente:

Option Explicit

Dim Shell

Set Shell = WScript.CreateObject ("Shell.Application")

Shell.ShutdownWindows

WScript.Quit()


He estado buscando clases para ejecutar comandos de script directamente,
pero no he sido capaz de hacerlo. Ahora mismo estoy ejecutando las ordenes
metiendolas en un archivo de script y ejecutando el archivo mediante:

Process.Start(Application.StartupPath + \\shutd.vbs);

Si alguien sabe la forma de ejecutar directamente el código, o la forma de
mostrar el cuadro de otra forma (mediante el paso de algún parametro a
rundll32, por ejemplo), agradecería me lo comentase.

Muchas gracias.
 

Leer las respuestas

#1 Tristan
28/05/2005 - 01:12 | Informe spam
No se si tu pregunta va dedicada a como ejecutar en general código vbscript
desde C#, o a como ejecutar desde C# la operación del ShutdownWindows.

Empezaré por la forma de ejecutar el mismo código pero sin vbscript. Basta
con hacer uso desde C# del mismo componente Shell.Application de tu código
vbscript:

using System.Reflection;
...
Type tipoShell = Type.GetTypeFromProgID("Shell.Application", true);
object shell = Activator.CreateInstance(tipoShell);
tipoShell.InvokeMember("ShutdownWindows", BindingFlags.InvokeMethod, null,
shell, null);

Las dos primeras lineas serían el equivalente al CreateObject. La tercera es
la llamada a ShutdownWindows.


Por otro lado, lo que realmente preguntabas. Como ejecutar código vbscript
desde C#.

Puedes hacer uso del control COM Microsoft Script Control:

string codigo = "for i = 1 to 10: msgbox(i): next";
Type tipoScript = Type.GetTypeFromProgID("MSScriptControl.ScriptControl",
true);
object script = Activator.CreateInstance(tipoScript);
tipoScript.InvokeMember("Language", BindingFlags.SetProperty, null, script,
new object[] {"VBScript"});
tipoScript.InvokeMember("AddCode", BindingFlags.InvokeMethod, null, script,
new object[] {codigo});

Juan Carlos Badiola
MVP - C#

Preguntas similares