Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

CreateProcess и отчет об ошибке

32K
08 декабря 2007 года
RealMaster
7 / / 08.12.2007
Доброго времени суток. Проблема такая. Создаю процес через CreateProcess. Если процесс отработал без ошибок все отлично работает. А вот если в процессе было деление на 0 или еще какая ошибка (или мемори оверфлов), то процес завершаться с не нулевым значением ну и все бы было замечательно если б не отчет об ошибке. Пока окошко "Отправить/Не отправлять" не закроют процесс считаться активным и система не имеет доступа к файлам которые открывал процесс.

Помогите избавиться от отчетов :)
1. Отключать отчеты пробовал, не помогло. Вылетает просто системная критическая ошибка.
2. Идею отлавливать окна и закрывать эмулируя нажатие кнопки уже 100 раз слышал, но как реализовать пока не придумал.
255
08 декабря 2007 года
Dart Bobr
1.4K / / 09.04.2004
копай в сторону SEH-фреймов. У тебя, скорее всего где-то исключение необработаное - тебе его нужно обработать.. (хотя могут быть и другие варианты.. побитый стек к примеру... )
505
08 декабря 2007 года
vAC
343 / / 28.02.2006
Что-то подобное я кажется делал. В основном процессе ставил
SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOGPFAULTERRORBOX|SEM_NOOPENFILEERRORBOX);

Все работало как часы - это была серверная часть (написанная максимально просто, чтобы не было ошибок), кот. запускала консольное приложение, выполняющее основную работу. Если основная работа сваливалась, то сервер оставался на плаву. Также сделал функцию удаленного пропатчивания основной программы. При этом никакие ошибки не должны были вешать глючный процесс, т.к. его нельзя было бы патчить в таком состоянии :)
350
08 декабря 2007 года
cheburator
589 / / 01.06.2006
Цитата: Dart Bobr
копай в сторону SEH-фреймов.


Уточняю. Копай MSDN: __try, __except.
Для начала - хотя бы что-то вроде

Код:
void main ()
{
  __try
  {
    // Основной код
  }
  __except(выражение)
  {
    // Обработка исключения
  }
}
32K
08 декабря 2007 года
RealMaster
7 / / 08.12.2007
Так какой смысл ставить try если ошибка возникает в дочернем процессе. Если ставить, то ставить нужно в нем, а код дочернего процесса недоступен.

Все приложения консольные. Родительское написано на Visual C++. Дочерние от DevC до FreePascal.

Счас попробую сделать так как предложил vAC. Надеюсь сработает :)
505
08 декабря 2007 года
vAC
343 / / 28.02.2006
Цитата: cheburator
Уточняю. Копай MSDN: __try, __except.
Для начала - хотя бы что-то вроде
Код:
void main ()
{
  __try
  {
    // Основной код
  }
  __except(выражение)
  {
    // Обработка исключения
  }
}



Но тут должно быть одно главное условие - наличие исходников запускаемой программы :)

32K
09 декабря 2007 года
RealMaster
7 / / 08.12.2007
О великий vAC :D Огромнейшее спасибо за помощь! Помогла твоя штука. Я месяц бился головой об МСДН питаясь найти ответ на свой вопрос. А на этом форуме за 2 часа нашел! Спасибо огромное.
350
09 декабря 2007 года
cheburator
589 / / 01.06.2006
Цитата: RealMaster
Так какой смысл ставить try если ошибка возникает в дочернем процессе. Если ставить, то ставить нужно в нем, а код дочернего процесса недоступен.

Все приложения консольные. Родительское написано на Visual C++. Дочерние от DevC до FreePascal.

Счас попробую сделать так как предложил vAC. Надеюсь сработает :)


А, ну да, не подумал...
Ну, если нет исходников дочернего, отлавливать появление этого окна и эмулировать нажатие ОК.
Хотя, я сам не уверен :)
Конкретно: хук устанавливаем на оконные сообщения и SendMessage/PostMessage.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог