Сорри, если неправильно формулирую
Есть такая задача: написать прогу на с#, которая будет запускать программы из списка и перезапускать их в случае возникновения ошибки. Контролируемые программы написаны не мной и не на NET.
Собстно у меня один вопрос: как отследить момент появления АшыПки в процессе? (момент, при котором выводится окно о невозможности дальнейшей работы программы, типа она будет закрыта и тд.)
Re: Отслеживание ошибки в двоичном процессе
От:
Аноним
Дата:
10.04.07 12:25
Оценка:
Здравствуйте, EKup, Вы писали:
EK>Сорри, если неправильно формулирую EK>Есть такая задача: написать прогу на с#, которая будет запускать программы из списка и перезапускать их в случае возникновения ошибки. Контролируемые программы написаны не мной и не на NET.
EK>Собстно у меня один вопрос: как отследить момент появления АшыПки в процессе? (момент, при котором выводится окно о невозможности дальнейшей работы программы, типа она будет закрыта и тд.)
Как вариант, можно перехватывать SEH-исключения — access violation, stack overflow и т.д.
Сделать это можно так:
static class Program
{
[STAThread]
static void Main()
{
Application.ThreadException +=
new ThreadExceptionEventHandler(Application_ThreadException);
// ... запускаем задачи
}
static void Application_ThreadException(Object sender, ThreadExceptionEventArgs e)
{
MessageBox.Show(e.Exception.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Здравствуйте, EKup, Вы писали:
EK>Сорри, если неправильно формулирую EK>Есть такая задача: написать прогу на с#, которая будет запускать программы из списка и перезапускать их в случае возникновения ошибки. Контролируемые программы написаны не мной и не на NET.
EK>Собстно у меня один вопрос: как отследить момент появления АшыПки в процессе? (момент, при котором выводится окно о невозможности дальнейшей работы программы, типа она будет закрыта и тд.)
вобщемто никак, если нужно хоть как-то, то можно попробовать отслеживать все окна приложения и анализировать заголовки окон, если в заголовках окон встречается чтонить вроде "Error", "Exception" и т.п. то считать что приложение вывело окно с сообщением об ошибке, но нет гарантии что проложение не откроет окно с текстом вроде "Processed with no errors"
в постановке задачи говорится что нужно отслеживать ошибки в чужом процессе, причем чужой процесс даже не является дотнетным
Т.е. никакой возможности узнать что в нем происходит нет, соответственно и понять когда в нем происходит ошибка и действительно ли это ошибка невозможно
Здравствуйте, EKup, Вы писали:
EK>Собстно у меня один вопрос: как отследить момент появления АшыПки в процессе? (момент, при котором выводится окно о невозможности дальнейшей работы программы, типа она будет закрыта и тд.)
еще можно периодически проверять состояние процесса — если он умер, то запускать его заново
Здравствуйте, _Morpheus_, Вы писали:
_M_>Здравствуйте, EKup, Вы писали:
EK>>Собстно у меня один вопрос: как отследить момент появления АшыПки в процессе? (момент, при котором выводится окно о невозможности дальнейшей работы программы, типа она будет закрыта и тд.)
_M_>еще можно периодически проверять состояние процесса — если он умер, то запускать его заново
Проблема в том, что он не умирает, а выводит окно: "приложение выполнило недопустимую операцию", "будет закрыто" и тд. И ждет реакцию пользователя. Собстно мне и надо, чтоб программа перезапускалась сама, без пользователя.
Так что тут 2 варианта: либо с помощью Win API как-то отслеживать ошибку в приложении, либо запускать процесс так, чтобы он при ошибке сам закрывался. А потом проверять, умер ли он.
А как собстно запускать процесс, чтобы он при ошибке сразу закрывался?