- Регистрация
- 09.10.2015
- Сообщения
- 3 916
- Благодарностей
- 3 867
- Баллы
- 113
Стандартный кубик для запуска программ (*.exe / *.bat / *.cmd файлов) не предоставляет возможности получить результат выполнения (т.е. если запускаемый *.bat файл выведет что-то на экран консоли, то это не возможно взять в качестве результата). Можно только получить EXIT CODE (код выхода программы), но это можно использовать только для проверки правильно ли выполнилась программа (если не ошибаюсь, то правильный код выхода - 0).
Но иногда бывают ситуации, что нужно запустить стороннюю утилиту, которая генерирует в ответ что-то, что в дальнейшем хочется использовать в зенке. Простой пример: использование imagemagick, в результате выполнения которой нужно получить лог выполнения, чтобы распарсить его и получить имена файлов, в которые она сохранила результаты.
К тому же, бывает и такое, что одна утилита запускает другую, а та в свою очередь ещё несколько. Но из-за некорректного завершения программы - часть процессов не "убивается", а остается висеть дальше. Это со временем забивает память и винда начинает тормозить, пока не поймешь, что зависла куча процессов.
Чтобы избежать этого - я сделал небольшой сниппет и запаковал его в шаблон, который можно использовать как "проект в проекте". Для запуска: нужно прописать путь к нему и передать в переменных следующие значения:
Также можно скопировать C#-кубик и к себе в проект, но обязательно нужно добавить ссылки из GAC + прописать Директивы Using + в общий скопировать метод CommonCode.KillProcessAndChildrens.
Шаблон во вложении
Но иногда бывают ситуации, что нужно запустить стороннюю утилиту, которая генерирует в ответ что-то, что в дальнейшем хочется использовать в зенке. Простой пример: использование imagemagick, в результате выполнения которой нужно получить лог выполнения, чтобы распарсить его и получить имена файлов, в которые она сохранила результаты.
К тому же, бывает и такое, что одна утилита запускает другую, а та в свою очередь ещё несколько. Но из-за некорректного завершения программы - часть процессов не "убивается", а остается висеть дальше. Это со временем забивает память и винда начинает тормозить, пока не поймешь, что зависла куча процессов.
Чтобы избежать этого - я сделал небольшой сниппет и запаковал его в шаблон, который можно использовать как "проект в проекте". Для запуска: нужно прописать путь к нему и передать в переменных следующие значения:
- IN_program_path - путь к запускаемой программе.
- IN_program_arguments - аргументы для запуска программы (не обязательная переменная).
- IN_max_execution_seconds - время ожидания работы программы в секундах (сколько секунд ждать ответа).
- OUT_content - результат выполнения.
Также можно скопировать C#-кубик и к себе в проект, но обязательно нужно добавить ссылки из GAC + прописать Директивы Using + в общий скопировать метод CommonCode.KillProcessAndChildrens.
Шаблон во вложении
Вложения
-
13,2 КБ Просмотры: 173
Последнее редактирование: