2013-04-16 2 views
1

У меня есть следующие функции, которые я пытаюсь использовать, чтобы определить длину файла 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; 
} 

я столкнулся с проблемой, когда я получаю следующее сообщение об ошибке:

Retrieving the COM class factory for component with CLSID {6BF52A52-394A-11D3-B153-00C04F79FAA6} failed due to the following error: 80040154..

когда Я называю вышеуказанную функцию от моего веб-приложения (назовём ниже):

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

Но когда я называю его из тестового приложения консоли жгутом я создал (точное сэм e call, как указано выше), он работает нормально. Я установил проект, который содержит функцию для целевого объекта x86 в свойствах сборки, но это не устранило проблему.

Кто-нибудь знает, почему это произойдет? Предложения о том, где начать отлаживать это?

ОБНОВЛЕНО ДЛЯ BOUNTY:

Хорошо, я попробовал несколько вещей, но я все еще получаю эту ошибку. Среди других вещей, которые я пробовал ниже шаги, которые я чувствовал, было самым перспективным, но не кости:

  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, он отлично работает.

Кто-нибудь имеет представление о том, почему вышеуказанное не решит проблему? Предложения о том, где искать дальше?

+0

Вы обеспечили, что ваш пул приложений имеет 'Enable 32-бит Applications' значение ИСТИНА? – McCee

+0

Это Windows Server 2003 с IIS 6. Это опция в IIS 6? –

+0

Хмм хороший момент. Попробуй это? http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/405f5bb5-87a3-43d2-8138-54b75db73aa1.mspx? mfr = true – McCee

ответ

2

Вы говорите, что он не работает в x64, но вы пытаетесь зарегистрировать 32-разрядную версию wmp.dll (C:\Windows\SysWow64 содержит 32-разрядные сборки).

Попробуйте зарегистрировать версию wmp.dll для x64, которая находится в C:\Windows\System32 на 64-битной платформе.

Если у вас нет этого файла, значит, на вашей платформе нет 64-битного Windows Media Player. Но есть обходное решение:

Создайте 32-битное консольное приложение, которое принимает имя файла mp3 в качестве аргумента командной строки и выводит продолжительность на stdout с помощью Console.WriteLine, а затем в webapp вы вызываете консольное приложение и записываете вывод как в this example on MSDN

+0

Должен ли я использовать regsvr32, который находится в SysWow64 или System32, когда я пытаюсь это сделать? –

+0

На самом деле я только что проверил и не существует 'wmp.dll' в' c: \ windows \ system32' :( –

+0

Он существует на моей машине с Windows 7. Возможно, у вас его нет, потому что Windows Server 2003 основан на XP. Я уверен, что DLL не является взаимозаменяемым. В любом случае я добавил обходной путь к моему ответу, который должен работать на вашем сервере. –

0

Дайте это lib вихрь. Его быстрый и не требует особых требований к программному обеспечению, которое будет установлено на машине.

http://naudio.codeplex.com/