创建axwindowsMediaPlayer播放列表时出现灾难性故障(HRESULT异常:0x8000FFFF)。

7
我正在使用axwindowsMediaPlayer对象在winform中显示视频。特别是我想播放一个播放列表。
在我的电脑(win7)上一切都运行良好,并且在另一台装有winXP的电脑上(最终用户的电脑)也曾经正常工作。
但是几天前出现了一些问题:在XP PC上,我开始收到以下异常信息。
Unhandled Exception:

Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))

System.Runtime.InteropServices.COMException

Stack Trace:
   at WMPLib.IWMPPlaylistCollection.newPlaylist(String bstrName)
   at BrinaS941.ScreenSaverVideo.ScreenSaver_Load(Object sender, EventArgs e)
   at System.Windows.Forms.Form.OnLoad(EventArgs e)
   at System.Windows.Forms.Form.OnCreateControl()
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
   at System.Windows.Forms.Control.WmShowWindow(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.ContainerControl.WndProc(Message& m)
   at System.Windows.Forms.Form.WmShowWindow(Message& m)
   at System.Windows.Forms.Form.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

这是引发异常的代码:

private void ScreenSaverVideo_Load(object sender, EventArgs e)
{
    WMPLib.IWMPPlaylist playlist = VideoPlayer.playlistCollection.newPlaylist("myplaylist");
    WMPLib.IWMPMedia media;
    VideoPlayer.uiMode = "none";
    VideoPlayer.settings.volume = 10;
    [....]

这个应用程序在工作中开始出现异常,并且现在仍然保持着相同的行为。

我尝试在XP机器上重新安装Windows Media Player(11),但是没有任何改变。

更新:

我尝试注释与播放列表相关的代码部分(并使用“URL”方法设置要播放的视频),一切都很好。 我真的很困惑...

如果有任何帮助,将不胜感激。谢谢。


(1) 你是否逐行调试代码,确切地找到错误点? (2) 你是否检查过“屏幕保护程序视频”与XP系统兼容? (3) 你是否尝试了“try-catch”语句块? - jbutler483
(1) 不,因为在我的开发电脑上没有出现错误。但我非常确定抛出异常的那一行是“WMPLib.IWMPPlaylist playlist = VideoPlayer.playlistCollection.newPlaylist("myplaylist");”,因为我尝试将行“VideoPlayer.uiMode = "none";”移动到前面并且它被正确执行了。 (2) 是的,自从两天前就一直正常工作。 (3) 我在try-catch中插入了代码:所以我的应用程序不会崩溃,但视频永远不会播放。 - muccix
@colinsmith 在事件查看器中我看不到任何有用的信息。据我所知,“WMPLib.IWMPPlaylistCollection”是包含在“Interop.WMPLib.dll”或“AxInterop.WMPLib.dll”中的对象,这些文件会随应用程序一起分发。是否存在某个dll文件的引用可能已经损坏了? - muccix
谢谢@colinsmith,但不幸的是它并没有解决问题。 - muccix
只是想补充一下,我尝试注释与播放列表相关的代码部分(并使用“URL”方法设置要播放的视频),一切都正常工作。我真的感到困惑... - muccix
显示剩余6条评论
1个回答

10

我终于找到问题所在了!

我的错误在于没有使用IWMPPlaylistCollection::remove方法删除已使用的播放列表。我发现我的文件系统中有2000个播放列表(myplaylist.wpl,myplaylist(1).wpl,...,myplaylist(1999).wpl),可能存在2000的限制。

我不知道这是文件系统还是WMP的限制。

一旦删除所有文件,一切都重新开始正常工作。

感谢大家的帮助!


谢谢,我刚遇到同样的问题,现在已经解决了。 - Zarkos
2
如果我没有看到你的答案,我绝对不可能找到解决这个问题的方法。感谢你回来并发布了解决方案。 - davehale23
难以置信!!为此花了几个月的时间。更让我困惑的是,由于某种原因,如果我按Shift/左键单击VS图标并作为本地帐户用户运行Visual Studio,那么这个问题异常就不会抛出。另外,昨晚我让我的应用程序一直运行,当我离开时它还正常工作,但今天早上当我回来时却一直卡在视频上(这是一个幻灯片展示,先显示图片,然后播放视频,再重新开始)。现在一切都有意义了——它在过夜的时候创建了所有这些播放列表......非常感谢您发布这篇文章!! - user1062142

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接