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

