powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ограничение выполнения запущенного процесса по времени
3 сообщений из 3, страница 1 из 1
ограничение выполнения запущенного процесса по времени
    #38968421
Фотография QEOS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я нуб в c#, но встала задачка, помогите кто чем может, пжлста.

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

вот такой код есть:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
        public void Pack()
        {
            string baseFolder = _baseFolder.Length > 0 ? "\"" + _baseFolder + "\"" : "";

            var proc = new Process();

            var psInfo = proc.StartInfo;
            psInfo.FileName = FullNamePackerExe;
            psInfo.Arguments = CommanLineParameter + " \"" + _archiveFileName + "\" \"" + _sourceFileName + "\" " + baseFolder;
            psInfo.WindowStyle = ProcessWindowStyle.Hidden;
            psInfo.RedirectStandardOutput = true;
            psInfo.RedirectStandardError = true;
            psInfo.UseShellExecute = false;

            string output = "";
            string errors = "";
            int c;

            try
            {
                proc.Start();

                if (proc != null)
                {
                    int howMuchMinutes = 0;
                    while (true)
                    {
                        if (proc.StandardOutput.Peek() >= 0)
                        {
                            c = proc.StandardOutput.Read();
                            output += (char)c;
                        }
                        if (proc.StandardError.Peek() >= 0)
                        {
                            c = proc.StandardError.Read();
                            errors += (char)c;
                        }
                        proc.WaitForExit(1000); // by 1 minutes
                        if (proc.HasExited)
                        {
                            break;
                        }
                        if (howMuchMinutes >= 5) // put there how long process must be
                        {
                            proc.Kill();
                            AddLogString("Превышено время архивации (" + howMuchMinutes.ToString() + " минут). Процесс остановлен.");
                        }
                        howMuchMinutes--;
                    }
                }

            }
            catch (Exception ee)
            {
                AddLogString("Ошибка в процессе сжатия RAR: " + ee.Message + "\r\nstdoutput: " + output + "\r\nerroutput:" + errors);
            }

            if (proc.ExitCode != 0)
            {
                output = proc.StandardOutput.ReadToEnd();
                errors = proc.StandardError.ReadToEnd();
                AddLogString("Ошибка в процессе сжатия RAR ExitCode: " + proc.ExitCode + "\r\nstdoutput" + output + "\r\nerroutput" + errors);
            }

        }



вот этот Peek() оказывается тоже ждет символ или хз чего он там ждет, но проверить через proc.WaitForExit(1000) не получается.

наверняка это уже решалось как-то? может поможете? хоть в каком направлении это реализуется?
...
Рейтинг: 0 / 0
ограничение выполнения запущенного процесса по времени
    #38968457
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QEOS, проще будет через WaitForExit с таймаутом:
Код: c#
1.
2.
3.
4.
5.
6.
int timeout = (int)TimeSpan.FromHours(1).TotalMilliseconds);
proc.Start();
if (!proc.WaitForExit(timeout))
{
    proc.Kill();
}
...
Рейтинг: 0 / 0
ограничение выполнения запущенного процесса по времени
    #38968482
Фотография QEOS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile,

странно, но я пробовал так. только у меня ж еще была потребность в выводе этого процесса..
если я делал proc.StandardOutput.ReadToEnd(); то у меня писалось что не удалось получить вводвывод..
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ограничение выполнения запущенного процесса по времени
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]