Звуковой сигнал службы Windows в Windows 2008/7 / Vista - PullRequest
4 голосов
/ 12 мая 2011

этот вопрос задавался ранее, но нет окончательного ответа.

Я написал службу Windows в Delphi, которая должна генерировать звуковой сигнал при определенных условиях.Это нормально работает на XP, но не работает в Windows 7 или 2008.

Примечание:

  1. Звуковой сигнал может работать, если я создаю консольную программу вместо службы - используя динамики ПК.
  2. Звуковой сигнал не может работать в службе, даже если я включил «разрешить службе взаимодействовать с рабочим столом» или даже назначил права администратора для службы.

Мой вопрос: есть ли способ, которым я могувызывать звуковой сигнал API, чтобы он работал в службе?Спасибо.

Ответы [ 2 ]

1 голос
/ 14 мая 2011

Обновление: Кто-то нашел способ здесь . он включает IOCTL и доступен для драйверов и служб.

Оригинальный ответ:

Единственный способ взаимодействия с пользователем, который я знаю, состоит в том, чтобы ваша служба взаимодействовала с небольшим процессом агента пользователя, который был бы добавлен в HKEY_LOCAL_MACHINE \ CurrentUser \ Run для автозапуска.

Это обычный шаблон в Vista и Win7, где взаимодействие с пользователем невозможно напрямую из сервиса:

  1. MyLittleService.exe не имеет доступа к пользователю. Но он может общаться через именованный канал с помощью утилиты иконки в трее.

  2. MyLittleTrayIcon.exe связывается со службой, и ему также можно дать сигнал пользователю с окнами сообщений, подать звуковой сигнал любым способом (звуковые эффекты Windows, вероятно, будут лучше, чем попытка получить доступ к динамику ПК, что не гарантируется). существовать на каждом ПК и т. д., и, возможно, даже может использоваться для управления службой (перезапустить ее, перезагрузить конфигурацию и т. д.).

1 голос
/ 12 мая 2011

Вы не можете сделать это в Vista и выше. Службы работают в другом сеансе и поэтому не имеют доступа к говорящему.

...