C# WMPLib:player.mediaCollection.getAll()。计数始终为0

C# WMPLib:player.mediaCollection.getAll()。计数始终为0,c#,.net,com,windows-media-player,wmp,C#,.net,Com,Windows Media Player,Wmp,我正在尝试编写代码,从用户的Windows Media Player库中读取每个项目。此代码适用于大多数用户,但对于某些用户,getAll()会在其Windows Media Player库中明显包含数百或数千项时返回空列表 var player = new WindowsMediaPlayer(); var collection = player.mediaCollection; var list = collection.getAll(); int total = list.count;

我正在尝试编写代码,从用户的Windows Media Player库中读取每个项目。此代码适用于大多数用户,但对于某些用户,
getAll()
会在其Windows Media Player库中明显包含数百或数千项时返回空列表

var player = new WindowsMediaPlayer();
var collection = player.mediaCollection;
var list = collection.getAll();
int total = list.count;

我通过向wmp.dll添加COM引用来引用
WMPLib
命名空间。我的应用程序附带Interop.WMPLib.dll。一些用户的计算机如何配置为运行Windows Media Player并在其库中播放许多歌曲,但WMPLib无法正常工作?此外,在任何情况下都有哪些变通方法可以可靠地读取用户的Windows Media Player库?

请尝试此片段,看看它是否适合您

public List<MusicEntry> GetMusicLibrary()
{ 
  List<MusicEntry> entries; 
  IWMPPlaylist mediaList = null; 
  IWMPMedia mediaItem; 

  try
  { 
    // get the full audio media list 
    mediaList = media.getByAttribute("MediaType", "Audio"); 
    entries = new List<MusicEntry>(mediaList.count); 

    for (int i = 0; i < mediaList.count; i++) 
    {
      mediaItem = mediaList.get_Item(i);

      // create the new entry and populate its properties
      entry = new MusicEntry() 
      { 
        Title = GetTitle(mediaItem), 
        Album = GetAlbum(mediaItem), 
        Artist = GetArtist(mediaItem), 
        TrackNumber = GetTrackNumber(mediaItem), 
        Rating = GetRating(mediaItem), 
        FileType = GetFileType(mediaItem) 
      }; 

      entries.Add(entry); 
    } 
  } 
  finally 
  { 
    // make sure we clean up as this is COM 
    if (mediaList != null) 
    {
      mediaList.clear(); 
    } 
  } 

  return entries;
}
公共列表GetMusicLibrary()
{ 
列出条目;
iwmplaylist mediaList=null;
IWMPMedia媒体项目;
尝试
{ 
//获取完整的音频媒体列表
mediaList=media.getByAttribute(“MediaType”、“Audio”);
条目=新列表(mediaList.count);
对于(int i=0;i
有关更多信息,请参阅这篇关于代码项目的优秀文章。

如果您碰巧有权访问一台机器进行测试,您从设置中得到了什么值。mediaAccessRights
?WMPLib无法正常工作?我是否可以请求您发布故障?通常,互操作库特定于DLL的一个版本,并且如果基础COM DLL中发生了某些更改,您必须具有适当的互操作DLL。你知道WMP。。。dll在所有窗口的版本中都是相同和兼容的。某些windows(如windows 7 N系列)默认情况下不会随windows media player一起提供。另外,从报告失败的人员那里获取配置也是一个好主意,并尝试按照@JoshuaDrake的回答从他们那里找到事实。媒体收藏是否可能不属于运行代码的同一帐户?另外,在一台有问题的机器上使用提升的权限运行代码可能是值得的——这是UAC的事情吗?