Определите тип приложения на c #, который используется классом, содержащимся в DLL - PullRequest
3 голосов
/ 19 февраля 2009

Есть ли способ узнать в C # тип запущенного приложения.

Служба Windows ASP.NET Форма Windows Консоль

Я хотел бы отреагировать на тип приложения, но не могу найти способ определить его.

Ответы [ 4 ]

5 голосов
/ 19 февраля 2009

У вас должен быть клиентский код, сообщающий вашему коду, что такое контекст, и затем работа с ним. В лучшем случае вы сможете угадать на основе внешних факторов.

Если вы хотите угадать, вот что я бы искал:

  • Для ASP.NET я бы искал HttpContext.Current
  • Для Windows Forms я вижу, есть ли в статической коллекции OpenForms класса Application какие-либо элементы.
  • Для Windows Presentation Foundation посмотрите, не является ли статическое свойство Current в классе Application нулевым.
  • Для службы действительно нет способа определить это, поскольку службы не должны регистрировать дескрипторы процессов, дескрипторы потоков или тому подобное.
  • Для окон консоли, если ничего из вышеперечисленного не соответствует действительности, то я бы предположил, что это консоль.
2 голосов
/ 19 февраля 2009

ASP.NET, проверьте, является ли HttpContext.Current нулевым

2 голосов
/ 19 февраля 2009

Попробуйте проверить 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), так что это легко обмануть.

0 голосов
/ 03 апреля 2017

Чтобы проверить формы , WPF , WCF или Консоль приложение:

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;
...