Попробуйте проверить Application.MessageLoop
. Значение должно быть истинным для приложений Windows Forms (которые имеют цикл сообщений WinForms) и false для служб Windows. Я не знаю, что он вернул бы для ASP.NET.
Что касается консольных приложений, у них не было бы цикла сообщений, поэтому они возвращали бы false. Вы можете проверить это, используя большинство свойств класса Console
, но я предупреждаю вас, что это HACK. Если вы должны , я бы сказал:
bool isConsole = Console.In != StreamReader.Null;
Обратите внимание, что консольное приложение все еще может вызывать Console.SetIn(StreamReader.Null)
, или приложение Windows может вызывать Console.SetIn(something else
), так что это легко обмануть.