Как компонент COM можно зарегистрировать на полпути? - PullRequest
1 голос
/ 09 июля 2011

Я создаю установщик, используя проект развертывания (установки) Visual Studio 2008.У проекта есть условие запуска «Привилегированный», поэтому запускать его могут только администраторы.Он использует модуль слияния, предоставленный третьей стороной, для регистрации COM-компонента.COM-компонент предоставляется через .NET Interop DLL, которая, в свою очередь, используется программой, для которой я собираю установщик.(Особенности: это модуль слияния Intuit, устанавливающий инфраструктуру QBFC).

После завершения установки компонент COM не может быть загружен.Ошибка "класс не зарегистрирован".Но когда я захожу в реестр, я вижу, что все правильные записи находятся под HKEY_CLASSES_ROOT\CLSID\{the class id} - где идентификатор класса совпадает с идентификатором класса сообщения об ошибке.Если я затем открою командную строку в административном режиме и заново зарегистрирую DLL-сервер COM-сервера с помощью Regsvr32, все исправлено, но я не вижу изменений в KEY_CLASSES_ROOT\CLSID

Когда я проверяю систему с помощьюМонитор процесса, пока он получает ошибку «класс не зарегистрирован», я вижу, что приложение получает ошибку «имя не найдено», когда оно пытается открыть CLSID, даже если CLSID определенно есть (я проверил дважды и трижды),Я думаю, это как-то связано с разрешениями.Альтернативная теория заключается в том, что, возможно, сообщение «класс не зарегистрирован» исходит от зависимого компонента, но это не объясняет того, что я вижу в мониторе процесса.

Все эти результаты теста получены из Windows7 Ultimate 32-битная операционная система.

Какие шаги вы предпримете, чтобы решить эту проблему?

1 Ответ

2 голосов
/ 09 июля 2011

Единственное, что может быть, это проблема с кэшем категорий компонентов. Это долгий путь, но если вы добавите шаг к вашей установке, чтобы удалить ключи в HKEY_CLASSES_ROOT\Component Categories\, это поможет? Если это так, вам нужно выяснить, какой comcat-кеш вам нужно удалить (т. Е. Какой из них используют ваши объекты).

Другое, что вы можете сделать, это экспортировать весь реестр, выполнить установку, экспортировать реестр, выполнить процедуру regsvr32, экспортировать реестр. Затем проверьте каждую ревизию экспортированного файла реестра. Это может дать вам представление о том, что изменилось, по крайней мере.

Наконец, убедитесь, что вы правильно выполняете 64-битную регистрацию, если это 64-битная машина.

...