Мне нужно сделать, чтобы приложение GUI С# 2005 вызывало .bat и несколько файлов VBScript по запросу пользователя. Это всего лишь стоп-лосс-решение до конца праздников, и я могу написать все это на С#. Я могу заставить файлы VBScript выполнять без проблем, но я не могу выполнить файл .bat. Когда я "click" в приложении С# для запуска .bat файла, окно DOS открывается и закрывается очень быстро, а тестовый .bat файл не выполняется - "Windows не распознает bat как внутреннюю или внешнюю команду" - это ошибка возвращается в поле DOS. Если я просто дважды щелкните файл .bat или вручную запустил его из командной строки, которую он выполнил. Мне также нужно, чтобы файл .bat выполнялся молча, если не требуется взаимодействие с пользователем - этот script копирует файлы 11k + в папки на сетевой машине, а иногда Windows "забывает", если пункт назначения является файлом или каталогом и просит пользователя скажите это, что это (это целый другой вопрос, не обсуждаемый здесь... не говоря уже о том, что меня это раздражает).
До сих пор в моем источнике С# я имел это:
Process scriptProc = new Process();
if (File.Exists("c:\\scripts\\batchfile1.bat"))
{
scriptProc.StartInfo.FileName = @"cscript";
scriptProc.StartInfo.Arguments = ("cmd.exe", "/C C:\\scripts\\batchfile1.bat"); // Wacky psuedo code //
scriptProc.Start();
scriptProc.WaitForExit(1500000);
scriptProc.Close();
}
if (!File.Exists("c:\\scripts\\batchfile1.bat"))
{
}
Я знаю, что этот код не работает, но это, по сути, то, что я хочу сделать. То, что я ищу, это что-то вроде этого для .bat файлов. Я предполагаю, что я должен сказать системе использовать cmd для запуска .bat. Я не понимаю, как это сделать. Я проверил этот сайт, который для С# 2003. Мне не очень помогает, так как я очень зеленый с С#.
EDIT: используя Kevin post, я снова попытался. То же решение script из этой публикации, но изменено для меня, так как мне не нужно перенаправлять:
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = "C:\\scripts\\batchfile1.bat";
proc.StartInfo.RedirectStandardError = false;
proc.StartInfo.RedirectStandardOutput = false;
proc.StartInfo.UseShellExecute = false;
proc.Start();
proc.WaitForExit();