2008-10-14 2 views
31

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

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

ответ

56

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

+0

Будет ли программа, вызывающая System.Diagnostics.Process.Start() зависать до тех пор, пока процесс не завершится, или продолжит ли процесс работать в фоновом режиме? – roydukkey 2011-05-06 14:04:38

+7

Да. По умолчанию программа будет работать, не дожидаясь завершения процесса. Однако System.Diagnostics.Process.Start(). WaitForExit() заставит вызывающую программу ждать завершения процесса. – roydukkey 2011-05-06 16:17:17

2

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

Это может быть сделано как running any other program from C# code:

Process.Start(path); 

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

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

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

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

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

3

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

0

В интересах поисковиков я нашел это post, что дает четкий ответ (esp, если у вас есть параметры). Испытали это - кажется, все нормально.

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); 
Смежные вопросы