2

我尝试使用以下函数来确定 MP3 文件的长度:

public static string GetMP3DurationBackup(string Filename)
{
    string Duration = null;
    WMPLib.WindowsMediaPlayer w = new WMPLib.WindowsMediaPlayer();
    WMPLib.IWMPMedia m = w.newMedia(Filename);
    if (m != null)
    {
        Duration = m.durationString;
    }
    w.close();
    return Duration;
}

我遇到了一个问题,我收到以下错误:

由于以下错误,检索具有 CLSID {6BF52A52-394A-11D3-B153-00C04F79FAA6} 的组件的 COM 类工厂失败:80040154..

当我从我的 Web 应用程序调用上述函数时(如下调用):

string test = MediaUtil.GetMP3DurationBackup(@"C:\Temp\Audio\bad.mp3");

但是当我从我创建的控制台应用程序测试工具中调用它时(与上面的调用完全相同),它工作正常。我已在 Build 属性中将包含该函数的项目设置为以 x86 为目标,但这并没有解决问题。

有谁知道为什么会发生这种情况?关于从哪里开始调试的建议?

更新赏金:

好的,我已经尝试了很多方法,但仍然出现此错误。除其他外,我尝试了以下我认为最有希望的步骤,但没有骰子:

  1. 进入我的注册表并确认值: HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{6BF52A52-394A-11d3-B153-00C04F79FAA6}\InprocServer32 是指C:\WINDOWS\SysWOW64\wmp.dll
  2. 打开命令提示符,导航到 C:\WINDOWS\SysWow64,运行:regsvr32.exe wmp.dll

我已经创建了一个控制台应用程序测试工具,如果我在 x64 中运行测试项目,我能够重现该错误。如果我将它切换到 x86,它工作正常。

有谁知道为什么上述不能解决问题?关于下一步看哪里的建议?

4

2 回答 2

2

您说它在 x64 中不起作用,但您尝试注册 wmp.dll 的 32 位版本(C:\Windows\SysWow64包含 32 位程序集)。

尝试注册 x64 版本的 wmp.dll,它位于C:\Windows\System3264 位平台上。

如果您没有此文件,则可能没有适用于您的平台的 64 位 Windows Media Player。但是有一个解决方法:

创建一个 32 位控制台应用程序,它将 mp3 文件名作为命令行参数并使用 将持续时间输出到标准输出Console.WriteLine,然后在 webapp 中,调用控制台应用程序并捕获输出,如MSDN 上的此示例

于 2013-04-23T14:53:19.047 回答
0

试一试这个库。它速度快,对要在机器上安装的软件没有特殊要求。

http://naudio.codeplex.com/

于 2013-04-25T20:40:19.633 回答