2011-01-10 4 views
0

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

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

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

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

ответ

1

Это, вероятно, не лучший ответ либо, но вы можете инвертировать цикл для:

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

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

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

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 
} 
+0

Правильно, проблема с этим состоит в том, что длина составляет 1, а процесс выполняется таким образом, «удалить log 'не будет выполнен, если это не было вызвано после остановки процессов. Это не дождалось завершения процесса, и это то, что мне нужно. – Ryan

+0

Не могли бы вы просто изменить «<' to a '>»? Это имеет ту же логику, что и приведенный вами пример, за исключением того, что проверяет условие выхода перед выполнением содержимого цикла. –

+0

Спасибо, greg, я очень ценю это. – Ryan

Смежные вопросы