Как определить, используется ли .Net DLL в приложении с графическим интерфейсом или веб-сервисе? - PullRequest
3 голосов
/ 07 октября 2008

Как определить в .Net DLL, работает ли она в приложении с графическим интерфейсом Windows или веб-службе? У меня есть класс низкого уровня, который используется двумя приложениями, и мне нужно отключить окна сообщений, когда он используется в веб-службе.

Приложение для Windows имеет более 200 решений, и я не в состоянии переформулировать существующий код. Веб-сервис должен повторно использовать некоторые функции, и я ищу быстрое решение.

Ответы [ 4 ]

5 голосов
/ 07 октября 2008

Просто небольшой совет: вашему низкоуровневому классу, вероятно, не следует использовать сами окна сообщений, но следует разрешить промежуточный (ближе к интерфейсу) класс для обработки случаев, когда вам может понадобиться ящик сообщений.

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

4 голосов
/ 07 октября 2008

Если он работает в веб-контексте, HttpContext.Current не будет нулевым.

3 голосов
/ 07 октября 2008

Вы можете использовать свойство Environment.UserInteractive .

Отчеты о свойствах UserInteractive false для процесса Windows или сервис, как IIS, который работает без пользовательский интерфейс. Если это свойство false, не отображать модальные диалоги или окна сообщений, потому что нет графический пользовательский интерфейс для пользователя взаимодействовать с.

Я знаю, что вы не можете этого сделать, но .... Вы также можете подумать о дизайне своего приложения.

0 голосов
/ 07 октября 2008

Я не знаю, сработает ли это, но может. Используйте эти звонки Win32:

GetModuleFileNameEx, чтобы получить исполняемый файл DLL и сохранить его для последующего сравнения.
EnumWindows для получения всех окон верхнего уровня.
GetWindowModuleFileName для перевода дескрипторов окна из EnumWindows в имена модулей.

Если вы можете найти свой собственный exe среди результатов GetWindowModuleFileName, тогда ваша dll работает в приложении с графическим интерфейсом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...