Console.Beep() - 声音不通过 RDC 重定向

Posted

技术标签:

【中文标题】Console.Beep() - 声音不通过 RDC 重定向【英文标题】:Console.Beep() - sound is not redirected through RDC 【发布时间】:2018-12-10 17:52:01 【问题描述】:

我有一个 Windows 程序,它使用 Win32 Beep(频率,持续时间)函数在发生重要事件时提醒用户。

现在我的一个用户是远程桌面连接到虚拟机,并在那里运行应用程序。其他声音被正确重定向(例如播放 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();
        
    

【问题讨论】:

MSDN 声称 Win32 Beep 在 Win7+ 的 RDC 客户端中播放 嗨,Brian,我远程访问版本为 16299 的 Windows 10 桌面并运行您的应用程序,我可以听到本地计算机上的哔哔声。所以我无法重现你的问题。您的操作系统版本是多少? 嗨@Rita Han,我刚刚发布了这个问题的答案。事实证明,必须运行 Beep 服务才能使其正常工作,而在我的情况下,该服务没有运行。 【参考方案1】:

进一步调查表明,必须运行一项名为“Beep”的服务,以通过选择的声音输出将这个过去与硬件相关的特定 API 调用转换为音调。

由于某种原因,在 VM 上安装操作系统时(似乎是默认设置?),哔声服务设置为手动启动。当我以管理员身份手动输入“NET START Beep”时,声音正常。

可以编辑注册表,让虚拟机启动时自动运行Beep服务,问题就永久解决了。

【讨论】:

以上是关于Console.Beep() - 声音不通过 RDC 重定向的主要内容,如果未能解决你的问题,请参考以下文章

如何在线程中播放声音?

是否可以在播放时更改 Console.Beep 的频率?

如何在(期间)鼠标单击时发出 Console.Beep?

在 windows 中生成声音频率 - VB.Net

在 C# 中播放动态创建的简单声音,无需外部库

C# - Console.Beep 在 Windows Vista 上不起作用