Обновление: Кто-то нашел способ здесь . он включает IOCTL и доступен для драйверов и служб.
Оригинальный ответ:
Единственный способ взаимодействия с пользователем, который я знаю, состоит в том, чтобы ваша служба взаимодействовала с небольшим процессом агента пользователя, который был бы добавлен в HKEY_LOCAL_MACHINE \ CurrentUser \ Run для автозапуска.
Это обычный шаблон в Vista и Win7, где взаимодействие с пользователем невозможно напрямую из сервиса:
MyLittleService.exe не имеет доступа к пользователю. Но он может общаться через именованный канал с помощью утилиты иконки в трее.
MyLittleTrayIcon.exe связывается со службой, и ему также можно дать сигнал пользователю с окнами сообщений, подать звуковой сигнал любым способом (звуковые эффекты Windows, вероятно, будут лучше, чем попытка получить доступ к динамику ПК, что не гарантируется). существовать на каждом ПК и т. д., и, возможно, даже может использоваться для управления службой (перезапустить ее, перезагрузить конфигурацию и т. д.).