2009-10-22 2 views
1

У нас есть сторонняя программа, которая не работает с ошибкой «Class Not Registered», когда она пытается выполнить определенную функциональность. Есть ли способ рассказать, какой класс он ищет? Иногда он говорит «Катастрофическая ошибка».Как определить пропущенную зависимость

Tried Dependency Walker статически и профилирование, ошибки Kernal32.exe. Я предполагаю, что это ошибка создания. Он не выявил недостающих зависимостей.

В ProcessMon не обнаружены попытки сбой в доступе к реестру или определенному пути к файлу.

Прошло несколько дней с отладчиком и инструментами, пытающимися выяснить, какой файл он есть. У нас есть работающая система производства, с которой мы можем получить доступ с учетной записью пользователя, не являющейся администратором.

Приложение стороннего разработчика было написано в Delphi, если это имеет значение. Нашим вызывающим приложением является C++.

Update: Использование Process Monitor от Sysinternals и фильтр, чтобы сузить естественный реестр чтения сбоев из необычных мне удалось найти идентификатор GUID, который отсутствовал и зарегистрировать соответствующую DLL.

ответ

1

Это очень большая вероятность проблемы с COM. Here - статья о том, как ее отладить. В основном, используйте RegMon. Он покажет COM-ключи реестра для чтения, tyring, чтобы найти поставщика класса.

1

В Linux, я предложил бы использовать Трассирование или ltrace, чтобы увидеть, что системные вызовы программа делает ... Ну, получается, есть версия для Windows из Трассирования ... :)

StraceNT

Если это работает в Linux, вы должны уметь видеть, какие системные вызовы (и передаются параметры ядра)

Смежные вопросы