Console.Beep() - звук не перенаправляется через RDC

У меня есть программа Windows, которая использует функцию звукового сигнала Win32 (частота, продолжительность), чтобы предупредить пользователя, когда происходит что-то важное.

Теперь один из моих пользователей подключается к удаленному рабочему столу на виртуальной машине и запускает там приложение. Другие звуки перенаправляются правильно (например, при воспроизведении файлов WAV). Однако звуковой сигнал не перенаправляется. Я даже создал простую тестовую программу, все, что она делает, это создает один сигнал, и, конечно же, он звучит только при запуске на моей локальной машине. Запустите на любом компьютере, к которому я подключаюсь к удаленному рабочему столу, и он будет работать без вывода сообщений.

Если есть способ «включить это», это было бы здорово. Если нет, я отправлю запрос на изменение, чтобы изменить приложение для воспроизведения файла wav вместо использования встроенной функции звукового сигнала.

Если интересно - вот очень простое консольное приложение, которое я тестировал (Visual Studio/C#)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BeepTester
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Press a key to continue and play a short beep...");
            Console.ReadKey();
            Console.Beep(1500, 300);
            Console.WriteLine("All done, Press a key to exit...");
            Console.ReadKey();
        }
    }
}

person Brian B    schedule 10.12.2018    source источник
comment
MSDN утверждает, что звуковой сигнал Win32 воспроизводится в клиенте RDC в Win7+.   -  person Anders    schedule 11.12.2018
comment
Привет, Брайан! Я удаленно подключаюсь к рабочему столу Windows 10 с версией 16299 и запускаю ваше приложение. Я слышу звуковой сигнал на своем локальном компьютере. Поэтому я не могу воспроизвести вашу проблему. Какая у вас версия ОС?   -  person Rita Han    schedule 26.12.2018
comment
Привет @Rita Han, я только что опубликовал ответ на вопрос. Оказывается, для этого должна быть запущена служба Beep, а в моем случае служба не работала.   -  person Brian B    schedule 28.12.2018


Ответы (1)


Дальнейшее расследование показывает, что существует служба под названием «Beep», которая должна быть запущена для преобразования этого конкретного вызова API, который раньше был связан с аппаратным обеспечением, в тон через выбранный звуковой выход.

По какой-то причине, когда ОС была установлена ​​на ВМ (кажется, по умолчанию?), служба звукового сигнала настроена на ручной запуск. Когда я вручную набрал «NET START Beep» от имени администратора, звук работает.

Можно отредактировать реестр, чтобы служба Beep запускалась автоматически при запуске виртуальной машины, и тогда проблема будет решена навсегда.

person Brian B    schedule 28.12.2018