Как вызвать файл VBScript в приложении C#?

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

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


person balaweblog    schedule 14.10.2008    source источник


Ответы (5)


Следующий код выполнит сценарий 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 напрямую, но на некоторых системах он просто запустит редактор :)

person Ilya Kochetov    schedule 14.10.2008
comment
Будет ли программа, вызывающая System.Diagnostics.Process.Start(), зависать до тех пор, пока процесс не завершится, или она продолжит работу, оставив процесс в фоновом режиме? - person roydukkey; 06.05.2011
comment
да. По умолчанию программа запускается, не дожидаясь завершения процесса. Однако System.Diagnostics.Process.Start().WaitForExit() заставит вызывающую программу дождаться завершения процесса. - person roydukkey; 06.05.2011
comment
Я думаю, что имя файла должно быть именем файла. то есть не cscript - person Spock; 25.10.2017
comment
Могу ли я прагматично добавить разрешения на выполнение? - person Tathagat Verma; 28.03.2018

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

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

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

person qxotk    schedule 07.06.2011
comment
Тем не менее, я использовал метод @Ilya выше - это был отличный способ проверить, что мой код vbscript и vb.net дает одинаковые результаты. - person qxotk; 07.06.2011

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

person Will    schedule 28.02.2012

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

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

Process.Start(path);

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

Process.Start("cscript path\\to\\script.vbs");
person Biri    schedule 14.10.2008

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

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);
person HockeyJ    schedule 27.09.2016