В Windows7 regsvr32 не пишет в HKCR\CLSID

Я создал новый простой COM-объект в Visual Studio 2008 с помощью мастера ATL. Объект имеет один класс и простые методы. Мастер ATL сгенерировал .rgs-файлы для моего класса.

Когда я бегу regsvr32 Simple.dll на моей машине XP класс зарегистрирован, информация отображается в HKCR\Simple.SimpleObject И в HKCR\CLSID\{guid} как я и ожидал.

Однако на моей 64-битной машине с Windows 7 это не то же самое. Я запускаю regsvr32 в качестве администратора частей в HKCR\Simple.SimpleObject объявиться. Но роль в HKCR\CLSID никогда не доберется туда. И поэтому я не могу создавать новые экземпляры. (Будучи в отчаянии, я пробовал оба regsvr32 в System32 и в SysWOW64, тот же эффект.)

Почему не regsrv32 положить данные в HKCR\CLSID?

3 ответа

Решение

HKCR - это псевдоним HKLM\Software\Classes, но он не показывает все. Найдите в HKLM\Software\Wow6432Node\Classes\CLSID зарегистрированный {guid}. Вот где их пишет c:\system32\syswow64\regsvr32.exe.

Вы упоминали, что уже пробовали это. Что-то действительно не так с этим, вы не можете произвольно запустить любую версию Regsvr32.exe и зарегистрировать одну и ту же DLL. 32-разрядная библиотека DLL не может быть загружена в 64-разрядном процессе. Другими словами, 64-разрядная версия Regsvr32.exe не может зарегистрировать 32-разрядный COM-сервер. И наоборот. То, почему вы не получили сообщение об ошибке, невозможно понять, единственное разумное объяснение состоит в том, что вы как-то не запустили нужную версию Regsvr32.

Чтобы действительно отладить это, используйте утилиту SysInternals ProcMon. Его след показывает, как регистратор ATL записывает ключи в реестр.

32-битные приложения и компоненты перенаправляются в другую часть реестра. Если вы просматриваете реестр с 64-битной версией regedit, вы не найдете его там, где вы ожидаете.

Поэтому ваш компонент должен зарегистрироваться в HKEY_CLASSES_ROOT\Wow6432Node\CLSID,

В этом пути реестра он должен быть виден всем 32-битным приложениям.

Смотрите также:

У нас просто была похожая проблема: Regsvr32 не сообщал об ошибке, но в реестр ничего не записывалось.

Запуск "Как администратор", казалось, сделал свое дело.

Другие вопросы по тегам