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

C#调用Windows Media Player播放MP3报错,求排查方案

问题排查与解决方案

首先看你的代码,最直接的问题是URL属性被错误地添加了外层双引号,Windows Media Player的URL属性只需要传入纯文件路径,不需要额外包裹引号(那是命令行参数的格式)。

修正后的代码

private void button1_Click(object sender, EventArgs e)
{
    WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();
    try {
        // 去掉路径外层的双引号,用@符号简化路径写法(避免双反斜杠)
        wplayer.URL = @"C:\Users\blah\B001N03GPM_(disc_1)_06_-_Funiculi_Funicula.mp3";
        // 或者用双反斜杠写法:"C:\\Users\\blah\\B001N03GPM_(disc_1)_06_-_Funiculi_Funicula.mp3"
        wplayer.controls.play();
        
        // 可选:检查播放状态,确认是否正常启动
        var playState = wplayer.playState;
        MessageBox.Show($"当前播放状态:{playState}");
    }
    catch (Exception ex) {
        // 不要只把异常消息存变量,直接显示出来才能看到错误
        MessageBox.Show($"错误信息:{ex.Message}\n{ex.StackTrace}");
    }
}

后续排查步骤

如果修正后还是有问题,按以下步骤逐一排查:

  • 修复异常捕获逻辑:你原来的catch块只是把异常消息赋值给s变量但没有输出,根本看不到实际错误。一定要把异常信息显示出来(比如用MessageBox或输出到调试窗口),这是排查问题的核心。
  • 验证WMP对象初始化:在创建wplayer后,尝试获取wplayer.versionInfo属性并输出,确认COM引用是否正常加载,对象是否初始化成功。
  • 测试简化路径:换一个路径和文件名更简单的MP3文件(比如C:\test.mp3)测试,排除文件名中特殊字符(虽然你直接打开没问题,但代码中可能有隐性处理差异)。
  • 检查播放状态:调用play()后,通过wplayer.playState属性查看状态,常见状态包括:
    • WMPPlayState.wmppsPlaying:正常播放
    • WMPPlayState.wmppsError:播放出错
    • WMPPlayState.wmppsStopped:未启动播放
  • 确认文件权限:确保你的程序有访问该MP3文件的权限(比如如果是用户目录,当前程序是否以普通用户身份运行,没有权限限制)。

内容的提问来源于stack exchange,提问作者Cliff W Estes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 14:38:20