IWMPPlaylistArray.Item(index)在Windows 8.1上引发IO异常

时间:2013-10-30 10:32:57

标签: c# .net com windows-8.1 windows-media-player

我有一个简单的应用程序枚举Windows Media Player播放列表。它只是获取每个播放列表的名称并将其打印到控制台:

class Program
{
    static void Main(string[] args)
    {
        var mediaPlayer = new WindowsMediaPlayer { uiMode = "invisible" };
        var allPlaylists = mediaPlayer.playlistCollection.getAll();

        Console.WriteLine("Found {0} wmp playlists");
        for (int i = 0; i < allPlaylists.count; i++)
        {
            try
            {
                IWMPPlaylist wmpPlaylist = allPlaylists.Item(i); //Exception here!
                Console.WriteLine("Playlist with index {0} has name '{1}'", i, wmpPlaylist.name);
            }
            catch (Exception e)
            {
                Console.WriteLine("Failed to get playlist with index {0} with error '{1}'", i, e.Message);
            }
        }

        Console.ReadLine();
    }
}

在Windows 8上运行正常但在尝试从IWMPPlaylistArray集合中获取播放列表项时在Windows8.1上抛出异常:

发现了System.IO.DirectoryNotFoundException   的HResult = -2147024893   消息=系统找不到指定的路径。 (HRESULT异常:0x80070003)   来源= WMP_POC   堆栈跟踪:        在WMPLib.IWMPPlaylistArray.Item(Int32 lIndex)        在WMP_POC.Program.Main(String [] args)中   InnerException:

即使在Windows 8.1上,它也适用于用户创建的播放列表,但对于预定义的播放列表,如“所有音乐”,“所有视频”,都会发生异常。

请帮忙!

1 个答案:

答案 0 :(得分:2)

我已经进行了更深入的调查,我发现“所有音乐”播放列表应该位于“C:\ Users [用户名] \ AppData \ Local \ Microsoft \ Media Player \ Sync播放列表\ en-US \ 00057566”在Windows 8.1上根本不存在,而在Windows 8上它存在。这似乎是问题的根本原因。

正如我在Windows 8.1中已经提到的,问题仅存在于预定义的播放列表中,并且在一天结束时我发现了以下解决方法,这似乎适用于Windows 8.1。如果您想获得“所有音乐”播放列表,只需使用以下代码:

IWMPPlaylist allMusicPlaylist = mediaPlayer.mediaCollection.getByAttribute("MediaType", "Audio"); 

根据the table on the msdn更改“MediaType”属性,您可以获得“所有视频”,“所有图片”等预定义的播放列表。