Последовательный запуск bat файлов. Не показывать окно, ожидать завершения

  • Автор темы Автор темы DevOps
  • Дата начала Дата начала

DevOps

Client
Регистрация
30.11.2020
Сообщения
497
Реакции
316
Баллы
63
Добрый день форум.
Для работы шаблона необходимо использовать 8 bat файлов, которые должны выполняться последовательно
Для запуска батника использовал следующую конструкцию
C#:
Развернуть Свернуть Копировать
System.Diagnostics.Process.Start(@"C:\Users\MayerskCo\Desktop\ALPHABET\customSTEP1\step.bat");
Но данная конструкция отображает окно консоли, что делает невозможным дальнейшую работу на компьютере, так какпостоянно вылетает окно консоли, батников 8 и все это работает в цикле.
Попробовал такую конструкцию

C#:
Развернуть Свернуть Копировать
System.Diagnostics.ProcessStartInfo processStart = new System.Diagnostics.ProcessStartInfo();
            processStart.FileName = (@"C:\Users\MayerskCo\Desktop\ALPHABET\customSTEP1\step.bat");
            processStart.CreateNoWindow = true;
            processStart.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            System.Diagnostics.Process.Start(processStart);
Как показывает лог - кубик выполняет код,окно не вылетает, но по факту выполнения батника, в файле где должен быть результат - он отсутствует, хотя при первом варианте запуска - батник выполняет необходимые вычисления и записывает их.
Есть ли вариант последовательного выполнения батников (то есть, каждый должен начинать выполнение строго по завершению предыдущего, чтобы не перегружать процессор) посредством С#кода?
Также подойдет и батник который последовательно запустит каждый из 8 батников, без отображения окна консоли. Тут есть следующий нюанс все батники находятся в разных папках
C:\Users\MayerskCo\Desktop\ALPHABET\customSTEP1\step.bat
C:\Users\MayerskCo\Desktop\ALPHABET\customSTEP2\step.bat
C:\Users\MayerskCo\Desktop\ALPHABET\customSTEP3\step.bat
и.т.д.
Заранее спасибо
 
  • Оценить
Реакции: vedi108
Добрый день форум.
Для работы шаблона необходимо использовать 8 bat файлов, которые должны выполняться последовательно
Для запуска батника использовал следующую конструкцию
C#:
Развернуть Свернуть Копировать
System.Diagnostics.Process.Start(@"C:\Users\MayerskCo\Desktop\ALPHABET\customSTEP1\step.bat");
Но данная конструкция отображает окно консоли, что делает невозможным дальнейшую работу на компьютере, так какпостоянно вылетает окно консоли, батников 8 и все это работает в цикле.
Попробовал такую конструкцию

C#:
Развернуть Свернуть Копировать
System.Diagnostics.ProcessStartInfo processStart = new System.Diagnostics.ProcessStartInfo();
            processStart.FileName = (@"C:\Users\MayerskCo\Desktop\ALPHABET\customSTEP1\step.bat");
            processStart.CreateNoWindow = true;
            processStart.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            System.Diagnostics.Process.Start(processStart);
Как показывает лог - кубик выполняет код,окно не вылетает, но по факту выполнения батника, в файле где должен быть результат - он отсутствует, хотя при первом варианте запуска - батник выполняет необходимые вычисления и записывает их.
Есть ли вариант последовательного выполнения батников (то есть, каждый должен начинать выполнение строго по завершению предыдущего, чтобы не перегружать процессор) посредством С#кода?
Также подойдет и батник который последовательно запустит каждый из 8 батников, без отображения окна консоли. Тут есть следующий нюанс все батники находятся в разных папках
C:\Users\MayerskCo\Desktop\ALPHABET\customSTEP1\step.bat
C:\Users\MayerskCo\Desktop\ALPHABET\customSTEP2\step.bat
C:\Users\MayerskCo\Desktop\ALPHABET\customSTEP3\step.bat
и.т.д.
Заранее спасибо
Вы подготовили процесс, запустили его, но не дождались его выполнения.
Может быть добавление строчки ожидания выполнения работы поможет решить проблему.
C#:
Развернуть Свернуть Копировать
var process =  System.Diagnostics.Process.Start(processStart);
process.WaitForExit();

Ну, а обработка всех файлов ничем не отличается от обычного перебора списка/массива путей.
Вот примерно так сможете отработать все по очереди.
C#:
Развернуть Свернуть Копировать
string[] paths = new[]{@"C:\Users\MayerskCo\Desktop\ALPHABET\customSTEP1\step.bat",
@"C:\Users\MayerskCo\Desktop\ALPHABET\customSTEP2\step.bat",
@"C:\Users\MayerskCo\Desktop\ALPHABET\customSTEP3\step.bat"};

foreach(string path in paths) {
  
var processStart = new System.Diagnostics.ProcessStartInfo();
            processStart.FileName = (path );
            processStart.CreateNoWindow = true;
            processStart.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

var process =  System.Diagnostics.Process.Start(processStart);
process.WaitForExit();
 
}
 
  • Оценить
Реакции: volody00 и DevOps
Вы подготовили процесс, запустили его, но не дождались его выполнения.
Может быть добавление строчки ожидания выполнения работы поможет решить проблему.
C#:
Развернуть Свернуть Копировать
var process =  System.Diagnostics.Process.Start(processStart);
process.WaitForExit();

Ну, а обработка всех файлов ничем не отличается от обычного перебора списка/массива путей.
Вот примерно так сможете отработать все по очереди.
C#:
Развернуть Свернуть Копировать
string[] paths = new[]{@"C:\Users\MayerskCo\Desktop\ALPHABET\customSTEP1\step.bat",
@"C:\Users\MayerskCo\Desktop\ALPHABET\customSTEP2\step.bat",
@"C:\Users\MayerskCo\Desktop\ALPHABET\customSTEP3\step.bat"};

foreach(string path in paths) {
 
var processStart = new System.Diagnostics.ProcessStartInfo();
            processStart.FileName = (path );
            processStart.CreateNoWindow = true;
            processStart.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

var process =  System.Diagnostics.Process.Start(processStart);
process.WaitForExit();

}
К сожалению ни один батник не отрабатывается, я в принципе костылем через кубики сделал "Запуск программы"
Не сильная потеря в принципе, но в любом случае спасибо за код, возможно проблема втом что батники запускают скрипты на Питоне, но и тут ядумаю что должен хотя бы первый отработаться. Ну да ладно, не критическая проблема, потом сделаю
 
К сожалению ни один батник не отрабатывается, я в принципе костылем через кубики сделал "Запуск программы"
Не сильная потеря в принципе, но в любом случае спасибо за код, возможно проблема втом что батники запускают скрипты на Питоне, но и тут ядумаю что должен хотя бы первый отработаться. Ну да ладно, не критическая проблема, потом сделаю
Может быть, что необходимо запустить процесс с правами администратора.
C#:
Развернуть Свернуть Копировать
processStart.Verb = "runas"; // запуск с правами администратора

Также в процессе отладки (пока пишете код и тестируете) - возможно есть смысл отображать окно, чтобы понимать что происходит.
Возможно, если не работает при запуске bat, то можно запустить cmd, где уже путь к файлу bat передать в качестве аргумента, что собственно его должно запустить.
C#:
Развернуть Свернуть Копировать
processStart.FileName = "cmd";
processStart.Arguments = "\""+path+"\"";

Короче нужно пробовать варианты - что-то да должно сработать....
 
  • Оценить
Реакции: Sho, DevOps и Astraport

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)