Вопрос

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

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

Это было полезно?

Решение

Следующий код выполнит скрипт 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.Вы также могли бы попробовать просто выполнить cscript напрямую, но в некоторых системах это просто запустит редактор :)

Другие советы

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

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

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

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

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

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

Process.Start(path);

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

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

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

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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top