Как определить отсутствующую зависимость - PullRequest
1 голос
/ 22 октября 2009

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

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

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

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

Стороннее приложение было написано на Delphi, если это имеет значение. Наше приложение для вызова - C ++.

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

Ответы [ 2 ]

1 голос
/ 22 октября 2009

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

1 голос
/ 22 октября 2009

В linux я бы предложил использовать strace или ltrace, чтобы посмотреть, какие системные вызовы вызывает программа ... Что ж, оказывается, есть версия strace для Windows ...:)

StraceNT

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...