2015-04-15 2 views
0

Я написал файл BAT для запуска моей программы десять раз. Но в какой-то момент программа выйдет из строя. Надеюсь, я смогу обнаружить это условие, а затем закрою программу. Процесс C# Ответ, который не знал этой проблемы.Как я могу получить уведомление о том, что моя программа разбилась

the picture of the problem

+0

Возможный дубликат «Что такое обработка исключений и как это влияет на меня?» – CodeCaster

+0

Не было бы лучше узнать, почему он не работает и не исправить это? – DavidG

+0

DavidG прав. Однако мне кажется, что вы хотите отключить диалоговые окна отчетов об ошибках Windows, чтобы они не блокировали пакетный файл при перепрограммировании. Таким образом, это дубликат. http://stackoverflow.com/questions/12102982/disabling-windows-error-reportingappcrash-dialog-programmatically – spender

ответ

2

См How do I specify the exit code of a console application in .NET?, MSDN: Main() Return Values (C# Programming Guide) и .NET Global exception handler in console application.

Диалог показан, потому что вы не поймаете исключение. Вы должны объединить все показанное там, так:

class Program { 
    static void Main(string[] args) { 
     AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper; 

     // Your code here 
     throw new Exception("Kaboom"); 
    } 

    static void UnhandledExceptionTrapper(object sender, UnhandledExceptionEventArgs e) { 
     Console.WriteLine(e.ExceptionObject.ToString()); 
     Environment.Exit(1); 
    } 
} 

И:

@echo off 
TestExceptionApp 
@if "%ERRORLEVEL%" == "0" goto good 

:fail 
    echo Execution Failed 
    echo return value = %ERRORLEVEL% 
    goto end 

:good 
    echo Execution succeeded 
    echo Return value = %ERRORLEVEL% 
    goto end 

:end 
+0

Выполняет ли обработчик 'UnhandledException' исключение из буфера и удаление приложения? Если нет, OP находится в том же положении, что и раньше, с диалоговыми окнами WER, блокирующими командный файл. – spender

+1

Ах. Хорошо ... Я пропустил «Environment.Exit (1);». Сначала вы попадаете туда. – spender

+0

Пока приложение не теряет исключений (которые предотвращает обработчик 'UnhandledException'), вы не увидите всплывающее окно WER _ для вашего кода_. Если код OP запускает другой исполняемый файл, который вызывает всплывающее окно, ну ... тогда они должны упомянуть об этом в OP. – CodeCaster

0

Вам придется написать отдельную программу, которая создает новый процесс, который ловит ошибку. Когда вы сделаете улов, вы можете отправить уведомление самому себе в выписке перед уведомлением об обработке ошибок.

Скорее всего, потребуется запустить отдельную программу, вызванную из локальной системы пользователя.

+0

И что произойдет, если программа, которая ловит ошибку, имеет ошибку? – DavidG

+0

ОП вернется с большим количеством вопросов? ИДК. Я считаю, что вопрос ОП - это не один, а два вопроса. Трудно сказать, что они действительно ищут. Оригинальный вопрос, чтобы обнаружить, а затем второй вопрос внизу, закрыть. Я думаю, может быть, вопрос должен быть переписан, а затем спрошен. – Frank

+0

@DavidG Я изложил свой комментарий. В отдельном процессе должна быть вызвана новая программа. Надеюсь, один без ошибок :-D – Frank

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