Хорошо, вкратце, у меня есть служба Windows, которая обрабатывает Win32_VolumeChangeEvent и регистрирует поступление дисков USB в журнал событий и в базу данных SQL. Дополнительным компонентом этого является скрытый пользовательский интерфейс (WinForms), который загружается во время сеанса пользователя при входе в систему - при этом появляется окно с сообщением, напоминающее пользователям о политике компании в отношении USB-ключей и т. Д. AFAIK, это был лучший путь, поскольку службы не могут дольше работать в интерактивном режиме.
В любом случае ... архитектурно, v1 этой мелочи выполнялся с компонентом пользовательского интерфейса, обрабатывающим сообщения WndProc для вставки устройства, а затем передавал идентификатор устройства через IPC (именованные каналы) в службу, которая обрабатывает методы WMI / запись EventLog (как не все пользователи имеют права локального администратора). Это имело обратную сторону: элемент пользовательского интерфейса был уничтожен и больше не обнаруживал вставки устройства.
Итак, текущая версия такова, что служба обрабатывает Win32_VolumeChangeEvents и получает необходимые данные с устройства, затем регистрирует их в EventLog и SQL. Все отлично и работает отлично. За исключением того, что сейчас я задаюсь вопросом, как лучше всего вызвать пользовательский интерфейс для отображения всплывающего окна.
Я искал вокруг Google и здесь, в поисках идей о событиях через IPC, так что я могу просто подписаться на событие из компонента пользовательского интерфейса и запустить его в сервисе, но я не нахожу ничего, что выскакивает, как быть полезным Я также ограничен .net2, поэтому WCF находится вне поля зрения (хотя я не боюсь p / invoke, если вы хотите пойти по этому пути).
Итак. Как бы вы это сделали? Ссылки, мысли, разговоры, псевдокод, актуальный код ... все ценится. Я пытаюсь придерживаться того, что считаю лучшей практикой, хотя я также считаю, что программирование - это своего рода искусство, и моя лучшая практика может быть чьей-то ужасной историей.
Так ТАК - что бы вы сделали? Дайте мне знать, если мне нужно уточнить:)