我有以下功能,我试图用来确定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检索组件的COM类工厂 {6BF52A52-394A-11D3-B153-00C04F79FAA6}由于以下原因而失败 错误:80040154 ..
当我从我的网络应用程序调用上述函数时(在下面调用):
string test = MediaUtil.GetMP3DurationBackup(@"C:\Temp\Audio\bad.mp3");
但是当我从我创建的控制台应用程序测试工具(与上面完全相同的调用)中调用它时,它工作正常。我已经设置了包含在Build属性中定位x86的函数的项目,但这并没有解决问题。
有谁知道为什么会这样?关于从哪里开始调试的建议?
更新为BOUNTY:
好的,我尝试过很多东西,但我仍然遇到这个错误。除了其他的事情,我尝试了下面的步骤,我觉得这是最有希望的,但没有骰子:
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{6BF52A52-394A-11d3-B153-00C04F79FAA6}\InprocServer32
是指C:\WINDOWS\SysWOW64\wmp.dll
regsvr32.exe wmp.dll
我创建了一个控制台应用程序测试工具,如果我在x64中运行测试项目,我能够重现错误。如果我将它切换到x86,它可以正常工作。
有没有人知道为什么以上不能解决问题?关于下一步的建议?
答案 0 :(得分:2)
你说它在x64中不起作用,但你试图注册32位版本的wmp.dll(C:\Windows\SysWow64
包含32位程序集)。
尝试在64位平台上注册位于C:\Windows\System32
的wmp.dll的x64版本。
如果您没有此文件,那么您的平台可能没有可用的64位Windows Media Player。但有一个解决方法:
创建一个32位控制台应用程序,将mp3文件名作为命令行参数,并使用Console.WriteLine
将持续时间输出到stdout,然后在webapp中调用控制台应用程序并捕获输出,如{{ 3}}
答案 1 :(得分:0)
给这个lib一个旋转。它速度快,对机器上安装的软件没有特殊要求。