作为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
相关产品推荐
相关产品推荐

