void main ()
{
__try
{
// Основной код
}
__except(выражение)
{
// Обработка исключения
}
}
CreateProcess и отчет об ошибке
Помогите избавиться от отчетов :)
1. Отключать отчеты пробовал, не помогло. Вылетает просто системная критическая ошибка.
2. Идею отлавливать окна и закрывать эмулируя нажатие кнопки уже 100 раз слышал, но как реализовать пока не придумал.
копай в сторону SEH-фреймов. У тебя, скорее всего где-то исключение необработаное - тебе его нужно обработать.. (хотя могут быть и другие варианты.. побитый стек к примеру... )
SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOGPFAULTERRORBOX|SEM_NOOPENFILEERRORBOX);
Все работало как часы - это была серверная часть (написанная максимально просто, чтобы не было ошибок), кот. запускала консольное приложение, выполняющее основную работу. Если основная работа сваливалась, то сервер оставался на плаву. Также сделал функцию удаленного пропатчивания основной программы. При этом никакие ошибки не должны были вешать глючный процесс, т.к. его нельзя было бы патчить в таком состоянии :)
Цитата: Dart Bobr
копай в сторону SEH-фреймов.
Уточняю. Копай MSDN: __try, __except.
Для начала - хотя бы что-то вроде
Код:
Все приложения консольные. Родительское написано на Visual C++. Дочерние от DevC до FreePascal.
Счас попробую сделать так как предложил vAC. Надеюсь сработает :)
Цитата: cheburator
Уточняю. Копай MSDN: __try, __except.
Для начала - хотя бы что-то вроде
Для начала - хотя бы что-то вроде
Код:
void main ()
{
__try
{
// Основной код
}
__except(выражение)
{
// Обработка исключения
}
}
{
__try
{
// Основной код
}
__except(выражение)
{
// Обработка исключения
}
}
Но тут должно быть одно главное условие - наличие исходников запускаемой программы :)
О великий vAC :D Огромнейшее спасибо за помощь! Помогла твоя штука. Я месяц бился головой об МСДН питаясь найти ответ на свой вопрос. А на этом форуме за 2 часа нашел! Спасибо огромное.
Цитата: RealMaster
Так какой смысл ставить try если ошибка возникает в дочернем процессе. Если ставить, то ставить нужно в нем, а код дочернего процесса недоступен.
Все приложения консольные. Родительское написано на Visual C++. Дочерние от DevC до FreePascal.
Счас попробую сделать так как предложил vAC. Надеюсь сработает :)
Все приложения консольные. Родительское написано на Visual C++. Дочерние от DevC до FreePascal.
Счас попробую сделать так как предложил vAC. Надеюсь сработает :)
А, ну да, не подумал...
Ну, если нет исходников дочернего, отлавливать появление этого окна и эмулировать нажатие ОК.
Хотя, я сам не уверен :)
Конкретно: хук устанавливаем на оконные сообщения и SendMessage/PostMessage.