Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   как контролировать ход выполнения запущенного процесса (http://forum.oszone.net/showthread.php?t=184289)

RUVATA 31-08-2010 09:27 1485405

как контролировать ход выполнения запущенного процесса
 
Всем доброго времени суток... smile
среда:Visual Studio 2010

Cитуация следующая:
Суть программы - производить архивирование и по хитрой своей логике раскладывать, рассылать эти в архивы, в зависимости от тех или иных условий, при этом совсем не исключено, что данные которые необходимо будет заархивировать в этот момент будут использоваться, в связи с чем (реакция на ошибку запущенного процесса) программе необходимо будет перейти к следующему архивированию, но в последствии попробовать еще несколько раз, в случае провала - запись в лог и.т. д

Для решения данной задачи... мне совсем не надо "кнопочной мишуры", потому - консольное приложение...
И всё вроде неплохо пока дело не доходит как раз до исключения, когда файлы уже используются

суть:
Я не делаю перенаправление ввода/вывода от запускаемых процессов 7zip... в главном окне консоли формируется отчет.
Запущенные процессы открываются отдельными консолями, при этом моя программа приспокойненько двигает дальше
(а я бы хотел, чтобы основная программа дождалась реакции запущенного ей процесса, как это сделать?)
для запуска процессов я использую конструкцию:

Код:

Dim zip7 As New Process
                                              '7zip описан в ситст.PATH
                zip7.StartInfo.FileName = "7z"
                zip7.StartInfo.Arguments = "a -tzip " & "сформированное имя архива" & " " & "архивируемый каталог"
                zip7.Start()

... если все нормально, в открывшихся консольных окнах мы видим там мы видим ход выполнения архивирования, а посля окошко закрывается...

хотелось бы знать, я могу вобще этими окнами управлять? т.е. приостановить используя Console.Readkey и.т. д?
как отслеживать ход выполнения. процесса, получить от него сообщение об ошибке или наоборот об успешном завершении... ?
поигавшись...
Код:

                zip7.StartInfo.UseShellExecute = False
                zip7.StartInfo.RedirectStandardInput = True
                zip7.StartInfo.RedirectStandardOutput = False

можно добиться того, что окна вообще отображаться не будут, что вообщем-то и нужно но при этом
неизвестно успешно или нет... вобщем как-то так...

Перелопатил гору разнообразных учебников... но там все о синтаксисе, да о функциях в основном...
А хотелось бы описания способов управления процессами, данными, вообще системой... может подскажет кто литературу.

Delirium 31-08-2010 09:40 1485411

Надо смотреть функции Process. Вот пример вывода результата в текущее окно:
http://www.java2s.com/Code/CSharp/De...cessOutput.htm
http://msdn.microsoft.com/en-us/libr...ardoutput.aspx

Пошуршите по поиску по такому критерию: http://www.google.ru/search?hl=ru&q=...%B2+Google&lr=

RUVATA 31-08-2010 11:52 1485490

как вообще юзать запущенные процессы... есть например у Process такое свойство:
Process.StandardError
'Получает поток, используемый для чтения вывода ошибок приложения
Есть у Process такой метод:
Process.StartInfo.RedirectStandardError
'Возвращает или задает значение, позволяющее определить, записываются ли выходные данные об ошибках в поток Process ..::.StandardError

вот как мне этот Process.StandardError запихнуть например в StremReader...

да и вообще где можно уму разуму набраться по потокам, где их, как ловить и т.д.

СУТЬ:
Объявляем объект - процесс
Объявляем объект - стрим-ридер
Об являем объект - поток (поток ошибок процесс)
Присваиваем процесс аргументы
Запускаем процесс
приостанавливаем ход до окончания процесс
получаем в стрим-редер - поток
обрабатываем их ... и от этого пляшем.

Admiral 31-08-2010 14:00 1485602

RUVATA, в этом случаи рациональнее смотреть в сторону LZMA SDK и получать ответ об успешности операций компрессии непосредственно от соответственных функций.


Время: 06:40.

Время: 06:40.
© OSzone.net 2001-