Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Avoid "program stopped working" in C#/.NET

I have a console application written in C#/.NET that I want to run from a script (nant). If an exception occurs in the console application, I would like nant to continue, but in Windows Vista there is a popup that searches for solutions and asks for debug etc.

I would like to avoid the popup with "program stopped working" when an exception happens in the console application. How can I control this from C#/.NET?

(A similar question addresses the issue for the C language, but I would like a solution for C#/.NET.)

(To clarify: I would like the exception to be passed to nant, but without the popup.)

like image 322
Ole Lynge Avatar asked Sep 14 '09 13:09

Ole Lynge


3 Answers

The JIT debugger popup occurs when there's an unhandled exception. That is, an exception tunnels all the way up the stack to the root of any thread in the runtime.

To avoid this, you can handle the AppDomain.CurrentDomain.UnhandledException event and just call Environment.Exit(1) to exit gracefully.

This will handle all exceptions on all threads within your AppDomain. Unless you're doing anything special, your app probably only has one AppDomain, so putting this in your public static void Main method should suffice:

AppDomain.CurrentDomain.UnhandledException += (sender, args) =>
{
    Console.Error.WriteLine("Unhandled exception: " + args.ExceptionObject);
    Environment.Exit(1);
};

You should probably use the NAnt logger to write out the error in this case too (can't recall the API for this offhand though.)

You can also disable JIT debugging on the machine. I would only recommend this in certain circumstances such as for a dedicated build server.

like image 50
Drew Noakes Avatar answered Oct 21 '22 06:10

Drew Noakes


Under Windows Vista you can disable this dialog for your programms.

Disable the "Problem Reports and Solutions feature". You find it under Control Panel-->Problem Reports and Solutions-->Change Settings-->Advanced Settings-->Turn off for my programs, problem reporting

like image 2
Jehof Avatar answered Oct 21 '22 07:10

Jehof


Just catch the exception and log/ignore it.

like image 1
maciejkow Avatar answered Oct 21 '22 06:10

maciejkow