Мне нужно вызвать файл VBScript (расширение файла .vbs) в моем приложении Windows С#. Как я могу это сделать?
Существует надстройка для доступа к файлу VBScript в Visual Studio. Но мне нужно получить доступ к script в коде. Как это сделать?
Мне нужно вызвать файл VBScript (расширение файла .vbs) в моем приложении Windows С#. Как я могу это сделать?
Существует надстройка для доступа к файлу VBScript в Visual Studio. Но мне нужно получить доступ к script в коде. Как это сделать?
Следующий код будет выполнять VBScript script без каких-либо подсказок или ошибок и логотипа оболочки.
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, если вы хотите, чтобы окна и т.д. отображались программой script. Вы также можете попробовать просто выполнить cscript
напрямую, но на некоторых системах он просто запустит редактор:)
Другой подход - создать проект библиотеки классов VB.NET, скопировать код VBScript в файл класса VB.NET и связать библиотеку классов VB.NET с вашей программой на С#.
Вам нужно будет исправить любые различия между VBScript и VB.NET(должно быть немного).
Преимущество здесь в том, что вы запустите исполняемый код.
Это проблема с разрешениями. Ваше приложение appPool должно работать на самом высоком уровне разрешения, чтобы сделать это в 2008 году. Идентификатор должен быть администратором.
Вы имеете в виду, что пытаетесь запустить файл vbs с С#?
Это можно сделать как запустить любую другую программу из кода С#:
Process.Start(path);
Но вы должны убедиться, что он ничего не потребует, и он работает с версией интерпретатора командной строки:
Process.Start("cscript path\\to\\script.vbs");
В интересах поисковиков я нашел этот 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);