【发布时间】:2013-04-09 13:21:21
【问题描述】:
我尝试使用以下函数来确定 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 为目标,但这并没有解决问题。
有人知道为什么会这样吗?关于从哪里开始调试的建议?
为赏金更新:
好的,我已经尝试了很多方法,但仍然出现此错误。除其他外,我尝试了以下我认为最有希望的步骤,但没有骰子:
- 进入我的注册表并确认该值位于:
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{6BF52A52-394A-11d3-B153-00C04F79FAA6}\InprocServer32指的是C:\WINDOWS\SysWOW64\wmp.dll - 打开的命令提示符,
导航到 C:\WINDOWS\SysWow64,运行:
regsvr32.exe wmp.dll
我创建了一个控制台应用程序测试工具,如果我在 x64 中运行测试项目,我能够重现该错误。如果我将它切换到 x86,它就可以正常工作。
有没有人知道为什么上述方法不能解决问题?关于下一步看哪里的建议?
【问题讨论】:
-
您是否确保您的应用程序池将
Enable 32-bit Applications设置为True? -
这是运行 IIS 6 的 Windows Server 2003。这是 IIS 6 下的选项吗?
-
为了子孙后代,我建议使用 Windows Server 2003/IIS 6.0 上的实际步骤: 步骤 1) 打开命令提示符并导航到 %systemdrive%\Inetpub\AdminScripts 目录。步骤 2) 键入以下命令:cscript.exe adsutil.vbs set W3SVC/AppPools/Enable32BitAppOnWin64 “true”
-
注意位数(32 vs 64)不是由“包含函数的项目”决定的,而是由执行调用的windows进程决定的。为了确定调用期间的位数,您可以将 IntPtr.Size 的值转储到 C# 中的某个位置。如果是 8(64 位),则需要确保 wmd.dll 在注册表的 64 位端注册。如果是 4(32 位),需要确保 wmd.dll 在注册表的 32 位端注册。