Что мне нужно сделать, так это сделать так, чтобы приложение с графическим интерфейсом пользователя C# 2005 вызывало .bat и несколько файлов VBScript по запросу пользователя. Это временное решение до конца праздников, и я могу все это написать на C#. Я могу без проблем запустить файлы VBScript, но не могу выполнить файл .bat. Когда я «щелкаю» в приложении C# для выполнения файла .bat, окно DOS открывается и закрывается очень быстро, а тестовый файл .bat не выполняется - «Windows не распознает bat как внутреннюю или внешнюю команду» - это ошибка вернулся в поле DOS. Если я просто дважды щелкну файл .bat или вручную запущу его из командной строки, он выполнится. Мне также нужен файл .bat для тихого выполнения, если не требуется взаимодействие с пользователем - этот сценарий копирует 11k + файлов в папки на сетевом компьютере, и иногда Windows «забывает», является ли местом назначения файл или каталог, и просит пользователя сообщить ему что это такое (это совсем другой вопрос, не обсуждаемый здесь ... разумеется, меня это раздражает).
Пока что в моем исходном коде C# у меня есть это:
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. Я не понимаю, как это сделать. Я проверил этот сайт, который предназначен для C# 2003. Мне не очень помогает, так как я очень зеленый с C#.
Обновлено: Используя сообщение Кевина, я попытался снова. Тот же сценарий решения из этого сообщения, но измененный для меня, поскольку мне не нужно перенаправлять:
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();





Вот что вы ищете:
Сервис зависает на WaitForExit после вызова командного файла
Это вопрос о том, почему служба не может выполнить файл, но он показывает весь код, необходимый для этого.
Если у вас возникла проблема с пакетным файлом, который спрашивает пользователя, является ли место назначения папкой или файлом, если вы знаете ответ заранее, вы можете сделать это следующим образом:
Если местом назначения является файл: эхо f | [путь к пакетному файлу]
Если папка: эхо д | [путь к пакетному файлу]
По сути, он просто направит букву после "echo" на вход командного файла.
Ладно, это больше похоже на это. Я попробую это сделать. Боковая панель - Вы когда-нибудь хотели, чтобы у языков программирования от MS были более длинные имена? Погуглить "C#" ".bat" в высшей степени бесполезно.