You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

作为Windows服务运行时,Audio session enumerator无法列出所有会话

Windows服务中无法获取完整音频会话列表的问题

我在Windows系统下编写代码,用于获取活动音频会话的音量信息并发送至外部设备。代码在命令行运行时完全正常,但改为Windows服务后台运行后,仅能获取Master会话和PID为0的系统声音会话,无法列出其他运行中的应用会话。

特殊现象:

  • 服务运行时,系统内置音量混音器会显示2个“系统声音”滑块
  • 此时用相同代码在命令行执行,既能看到2个PID为0的会话,也能列出全部正常应用会话,与服务端表现截然不同

调试发现,IAudioSessionEnumerator::GetCount()在服务环境下仅返回1个会话(即系统声音),但实际存在2个额外的活动会话,这些会话在命令行和系统音量混音器中均可被识别。

以下是精简后的代码(正式代码会检查所有返回值且无报错,仅GetCount返回值异常):

CoCreateInstance(__uuidof(MMDeviceEnumerator), 
    NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&enumerator);

enumerator->GetDefaultAudioEndpoint(EDataFlow::eRender, ERole::eMultimedia, &device);
device->Activate(__uuidof(IAudioSessionManager2), CLSCTX_ALL, NULL, (void**)&manager);
manager->GetSessionEnumerator(&sessionEnumerator);
sessionEnumerator->GetCount(&sessionCount);
// 服务环境下session count为1,命令行下为3

/*
循环遍历会话,获取所需信息,这部分逻辑正常
*/

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 06:50:14