Мониторинг удаленного процесса - PullRequest
0 голосов
/ 11 января 2011

У меня есть метод, который останавливает службу (и), но мне также нужно удалить журналы. Обычно это не проблема, но процесс может занять немного времени перед закрытием. Опять же, хотя служба кажется остановленной, процесс требует дополнительного времени для правильного закрытия. Поскольку процесс все еще выполняется, я не могу удалить журналы, поэтому мне нужно найти способ контролировать .exe, чтобы знать, когда безопасно удалять журналы.

На данный момент мой лучший вариант - цикл do while, к сожалению, первая итерация оператора delete выдает исключение и останавливает программу.

do
{
// delete logs
}
while (System.Diagnostics.Process.GetProcessesByName(processName, machineName).Length > 0);

Я уверен, что есть простое решение, но мой недостаток опыта - настоящая проблема.

1 Ответ

1 голос
/ 11 января 2011

Возможно, это тоже не лучший ответ, но вы можете инвертировать цикл в:

while (System.Diagnostics.Process.GetProcessesByName(processName, machineName).Length > 0)
{
    // delete log files.
}

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

Хакерский способ обойти это состоит в том, чтобы выполнить цикл и выйти из него вручную, как только возникнут следующие условия:

bool CloseProcessOperation = true; // Control variable incase you want to abort the loop
while (CloseProcessOperation)
{
    if (System.Diagnostics.Process.GetProcessesByName(processName, machineName).Length > 0) { break; }  
    // break if no logs exist
    // break for some other condition
    // etc

    // delete logs
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...