Хорошо, короткая короткая история У меня есть служба Windows, которая обрабатывает Win32_VolumeChangeEvent и регистрирует поступления USB-дисков в журнал событий и в базу данных SQL. Дополнительным компонентом этого является скрытый пользовательский интерфейс (WinForms), который загружается в сеансе пользователя при входе в систему - это всплывающее окно с напоминанием пользователям политики компании о USB-ключах и т. Д. AFAIK, это был лучший способ, поскольку услуги не могут более продолжительный запуск в интерактивном режиме.C# Пропускание через IPC
Anywho ... архитектурно, v1 этой маленькой вещи работал с компонентом пользовательского интерфейса, обрабатывающим сообщения WndProc для вставки устройства, затем передавал идентификатор устройства через IPC (именованные каналы) службе, которая обрабатывала бы методы WMI/запись в журнале событий (поскольку не все пользователи имеют права локального администратора). Это имело недостаток элемента интерфейса, который был убит процессом и больше не обнаруживал вставки устройства.
Итак, текущая версия заключается в том, что служба обрабатывает Win32_VolumeChangeEvents и получает необходимые данные с устройства, а затем записывается в EventLog и SQL. Все отлично и отлично работает. Кроме того, сейчас мне интересно, как лучше всего запустить интерфейс для отображения всплывающего окна.
Я исследовал Google и здесь, ища идеи о событиях по IPC, поэтому я могу просто подписаться на событие из компонента пользовательского интерфейса и запустить его внутри службы, но я не нахожу много, что выпрыгивает как полезный. Я также ограничен .net2, поэтому WCF не работает (хотя я не боюсь p/invoke, если вы хотите пойти таким образом).
So. Как бы вы это сделали? Ссылки, мысли, промахи, псевдокод, фактический код ... все оценили. Я пытаюсь придерживаться того, что, по моему мнению, является лучшей практикой, хотя я также думаю, что программирование - это немного форма искусства, и моя лучшая практика может быть чужой ужасной историей.
Так что, что бы вы сделали? Дайте мне знать, если мне нужно уточнить :)
Это было бы относительно легко с WCF. Почему вы ограничены .NET 2? Вы знаете, что .NET 3.0 и 3.5 являются суперсетями .NET 2, а не отдельными версиями и не меняют основные сборки? –
У нас нет хорошего покрытия на стороне клиента .net 3 устанавливает, тогда как у нас почти полное покрытие .net 2 устанавливает. Нажатие .net3 на данный момент не является вариантом. – dotalchemy