2009-05-26 4 views
0

Любой надежный элегантный способ определения того, является ли текущее приложение выигрышной или веб-формой (или другим) приложением?Определить выигрыш или веб-формы

У нас есть общий класс конфигурации, которому необходимо открыть либо app.config, либо web.config.

В настоящее время я ломаю ArgumentException при попытке OpenExeConfiguration, но это не очень элегантно и может маскировать другие проблемы.

ответ

3

Я обычно проверить, есть ли HttpContext доступны (если это веб-приложения, так как в вебе-службе HttpContenxt.Current равно нуль) Чтобы сделать это, вы должны добавить System.Web ваши ссылки.

if(HttpContext.Current!=null) 
//It's a web application 
else 
//it's a win application 
+0

Спасибо, это то, что я искал –

1

Попробуйте использовать инъекцию зависимостей, чтобы класс конфигурации не должен был выполнять оператор switch.

0

Вы могли бы попытаться получить процесс выполняющийся с помощью Process.GetCurrentProcess(), возможно, вы могли бы проверить Process.MainWindowHandle не IntPtr.Zero или проверить имя процесса или потенциально сканировать загруженные модули процесса. Это будет иметь преимущество (я бы предположил) не требовать загрузки узлов, которые не требуются для вашего текущего контекста выполнения (например, не загружать System.Windows.Forms.dll, когда это приложение является веб-приложением).

Однако это кажется неэлегантным.

+0

Спасибо, Phil, это не сработает, если это сервис, хотя у службы также нет MainWindowHandle. Я хотел избежать опроса запущенного процесса, поскольку он кажется довольно взломанным. –