Is there any way to know in C# the type of application that is running.
Windows Service ASP.NET Windows Form Console
I would like to react to the application
You should have the client code tell your code what the context is and then work from that. At best, you will be able to guess based on external factors.
If you must guess, this is what I would look for:
ASP.NET, check the if HttpContext.Current is null
To check for a Forms, WPF, WCF or Console application:
if (System.Windows.Forms.Application.OpenForms.Count > 0)
{
return ApplicationType.WindowsForms;
}
if (System.Windows.Application.Current != null)
{
return ApplicationType.Wpf;
}
if (System.ServiceModel.OperationContext.Current != null)
{
return ApplicationType.Wcf;
}
try
{
int windowHeight = Console.WindowHeight; // an exception could occur
return ApplicationType.Console;
}
catch (IOException)
{
}
return ApplicationType.Unknown;
Try checking Application.MessageLoop. It should be true for Windows Forms applications (that have a WinForms message loop), and false for windows services. I don't know what it would return for ASP.NET.
As for console applications, they would have no message loop so they would return false. You can check for that using most properties in the Console class, but I warn you that it's a HACK. If you must, I'd go with:
bool isConsole = Console.In != StreamReader.Null;
Note, that a console app could still call Console.SetIn(StreamReader.Null) or a windows app could call Console.SetIn(something else), so this is easily tricked.