Regsvr32 странное поведение => Regsvr32 не выдает сообщение об успехе или сбое - PullRequest
6 голосов
/ 11 августа 2011

У меня есть фильтр DirectShow: MyFilter.ax

Когда я пытаюсь зарегистрировать MyFilter.ax с помощью утилиты Regsvr32, она выдает НЕТ ошибки или любое сообщение (успех или неудача). Но фильтр не зарегистрирован.

Утилита Regsvr32 отлично работает для других моих фильтров.

Почему регистры Regsvr32 не выдают сообщений об успехах или сбоях? Как отладить мой сбой Regsvr32? Любая альтернативная утилита для регистрации фильтра DirectShow, которая может дать значимое сообщение?

С наилучшими пожеланиями

Обновление:

Я устанавливаю чистую ОС win7 на виртуальную машину. Затем попробуйте зарегистрироваться. Сбой снова без сообщения-ответа от regsvr32.

Но затем снова установите чистую ОС win7 на виртуальную машину. Затем выполните все обновления . И после того, как я сделаю обновления, regsvr32 работал и установил мой фильтр .... Я не знаю, по какой причине происходит сбой regsvr32 и какие обновления это исправить. Или это действительно проблема с обновлением ...

Ответы [ 4 ]

3 голосов
/ 07 сентября 2011

То, что может иметь место и демонстрировать упомянутое поведение, заключается в том, что где-то в вашем фильтре вы находитесь в тупике или в бесконечном ожидании, поэтому DllRegisterServer библиотеки DLL никогда не возвращается.В этом случае вы увидите, что каждый раз, когда вы запускаете regsvr32, диспетчер задач показывает вам еще один запущенный процесс regsvr32.exe с загрузкой процессора или без него.

Если это то, что у вас есть, вы захотите подключиться с помощью отладчика и посмотреть, где именно у вас там мертвая петля ...

1 голос
/ 07 декабря 2012

У меня тоже была эта проблема, и вот что я сделал, чтобы выяснить, что было не так:

Установите dll в качестве запускаемого проекта.
Перейдите в свойства конфигурации -> Отладка: Установите для команды значение c:\windows\syswow64\regsvr32.exe (или 32-битная версия, если вы используете 32-битную систему в c:\windows\system32\regsvr32.exe)
Установите для аргументов команды полный путь к вашей dll
Запустите в режиме отладки, вы должны увидеть всплывающее окно, котороеВаша DLL правильно зарегистрирована, затем выполнение будет зависать.
Нажмите, чтобы приостановить выполнение
Проверьте в окне отладки потоков и проверьте, какие потоки в настоящее время активны.Проверьте их стеки вызовов, так как большинство потоков (в моем случае) находятся в ntdll.dll

1 голос
/ 11 августа 2011

Вы можете самостоятельно реализовать такое приложение, как regsvr32 , вам просто нужно загрузить целевую DLL и вызвать функцию DllRegisterServer .Вы можете реализовать его в C #, например, используя следующее объявление p / invoke:

[DllImport("yourdll.ax")]
private static extern int DllRegisterServer();

Возможно, вам удастся сузить проблему таким образом.

Обновление:

Я бы попробовал установить Windows 7 Platform SDK и скомпилировать ваш фильтр DirectShow.Я уже сталкивался с проблемами совместимости с более старыми версиями DirectX в Windows 7 (даже без DLL), хотя я не сохранил ссылку (если кто-то читает эту ссылку, пожалуйста, опубликуйте ее).

1 голос
/ 11 августа 2011

Убедитесь, что вы не вызываете regsvr32 с опцией / s

...