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

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
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

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
Добрый день форум.
Для работы шаблона необходимо использовать 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

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63
Вы подготовили процесс, запустили его, но не дождались его выполнения.
Может быть добавление строчки ожидания выполнения работы поможет решить проблему.
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();

}
К сожалению ни один батник не отрабатывается, я в принципе костылем через кубики сделал "Запуск программы"
Не сильная потеря в принципе, но в любом случае спасибо за код, возможно проблема втом что батники запускают скрипты на Питоне, но и тут ядумаю что должен хотя бы первый отработаться. Ну да ладно, не критическая проблема, потом сделаю
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
К сожалению ни один батник не отрабатывается, я в принципе костылем через кубики сделал "Запуск программы"
Не сильная потеря в принципе, но в любом случае спасибо за код, возможно проблема втом что батники запускают скрипты на Питоне, но и тут ядумаю что должен хотя бы первый отработаться. Ну да ладно, не критическая проблема, потом сделаю
Может быть, что необходимо запустить процесс с правами администратора.
C#:
processStart.Verb = "runas"; // запуск с правами администратора
Также в процессе отладки (пока пишете код и тестируете) - возможно есть смысл отображать окно, чтобы понимать что происходит.
Возможно, если не работает при запуске bat, то можно запустить cmd, где уже путь к файлу bat передать в качестве аргумента, что собственно его должно запустить.
C#:
processStart.FileName = "cmd";
processStart.Arguments = "\""+path+"\"";
Короче нужно пробовать варианты - что-то да должно сработать....
 
  • Спасибо
Реакции: Sho, DevOps и Astraport

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