Как вызвать файл VBScript в приложении C #? - PullRequest
33 голосов
/ 14 октября 2008

Мне нужно вызвать файл VBScript (расширение файла .vbs) в моем приложении C # для Windows. Как я могу это сделать?

Существует надстройка для доступа к файлу VBScript в Visual Studio. Но мне нужно получить доступ к сценарию в коде позади. Как это сделать?

Ответы [ 5 ]

60 голосов
/ 14 октября 2008

Следующий код выполнит сценарий VBScript без запросов или ошибок и без логотипа оболочки.

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

Более сложный метод будет использовать:

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

Использование свойств StartInfo предоставит вам достаточно детальный доступ к настройкам процесса.

Вам необходимо использовать Windows Script Host , если вы хотите, чтобы окна и т. Д. Отображались программой-скриптом. Вы также можете попробовать просто выполнить cscript напрямую, но в некоторых системах он просто запустит редактор:)

4 голосов
/ 07 июня 2011

Другой подход заключается в создании проекта библиотеки классов VB.NET, копировании кода VBScript в файл классов VB.NET и обращении к библиотеке классов VB.NET из вашей программы C #.

Вам нужно исправить любые различия между VBScript и VB.NET (должно быть немного).

Преимущество здесь в том, что вы будете запускать код в процессе.

3 голосов
/ 28 февраля 2012

Это проблема с разрешениями. Ваше приложение appPool должно работать на самом высоком уровне разрешений, чтобы сделать это в 2008 году. Удостоверение должно быть Администратором.

2 голосов
/ 14 октября 2008

Вы имеете в виду, что вы пытаетесь запустить VBS-файл из C #?

Это можно сделать как , запустив любую другую программу из кода C # :

Process.Start(path);

Но вы должны убедиться, что он ничего не будет запрашивать, и он работает с версией интерпретатора командной строки:

Process.Start("cscript path\\to\\script.vbs");
1 голос
/ 27 сентября 2016

Для удобства поисковиков я нашел этот пост , который дает четкий ответ (особенно если у вас есть параметры) Протестировал - вроде нормально работает.

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