What common routines do you put in your Program.cs for C#

Posted by Rick on Stack Overflow See other posts from Stack Overflow or by Rick
Published on 2009-11-03T14:42:33Z Indexed on 2010/06/07 17:52 UTC
Read the original article Hit count: 233

Filed under:
|

I'm interested in any common routine/procedures/methods that you might use in you Program.cs when creating a .NET project. For instance I commonly use the following code in my desktop applications to allow easy upgrades, single instance execution and friendly and simple reporting of uncaught system application errors.


	using System;
	using System.Diagnostics;
	using System.Threading;
	using System.Windows.Forms;

	namespace NameoftheAssembly
	{
		internal static class Program
		{
			/// <summary>
			/// The main entry point for the application. Modified to check for another running instance on the same computer and to catch and report any errors not explicitly checked for.
			/// </summary>
			[STAThread]
			private static void Main()
			{
				//for upgrading and installing newer versions
				string[] arguments = Environment.GetCommandLineArgs();
				if (arguments.GetUpperBound(0) > 0)
				{
					foreach (string argument in arguments)
					{
						if (argument.Split('=')[0].ToLower().Equals("/u"))
						{
							string guid = argument.Split('=')[1];
							string path = Environment.GetFolderPath(Environment.SpecialFolder.System);
							var si = new ProcessStartInfo(path + "\\msiexec.exe", "/x" + guid);
							Process.Start(si);
							Application.Exit();
						}
					}
					//end of upgrade
				}
				else
				{
					bool onlyInstance = false;
					var mutex = new Mutex(true, Application.ProductName, out onlyInstance);
					if (!onlyInstance)
					{
						MessageBox.Show("Another copy of this running");
						return;
					}
					AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
					Application.ThreadException += ApplicationThreadException;
					Application.EnableVisualStyles();
					Application.SetCompatibleTextRenderingDefault(false);
					Application.Run(new Form1());
				}
			}

			private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
			{
				try
				{
					var ex = (Exception) e.ExceptionObject;
					MessageBox.Show("Whoops! Please contact the developers with the following"
									+ " information:\n\n" + ex.Message + ex.StackTrace,
									" Fatal Error", MessageBoxButtons.OK, MessageBoxIcon.Stop);
				}
				catch (Exception)
				{
					//do nothing - Another Exception! Wow not a good thing.
				}
				finally
				{
					Application.Exit();
				}
			}

			public static void ApplicationThreadException(object sender, ThreadExceptionEventArgs e)
			{
				try
				{
					MessageBox.Show("Whoops! Please contact the developers with the following"
									+ " information:\n\n" + e.Exception.Message + e.Exception.StackTrace,
									" Error", MessageBoxButtons.OK, MessageBoxIcon.Stop);
				}
				catch (Exception)
				{
					//do nothing - Another Exception! Wow not a good thing.
				}
			}
		}
	}


I find these routines to be very helpful. What methods have you found helpful in Program.cs?

© Stack Overflow or respective owner

Related posts about c#

Related posts about .NET