В Windows7 regsvr32 не пишет в HKCR \ CLSID - PullRequest
3 голосов
/ 04 марта 2011

Я создал новый простой 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 ]

6 голосов
/ 04 марта 2011

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 записывает ключи в реестр.

4 голосов
/ 04 марта 2011

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

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

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

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

1 голос
/ 21 ноября 2011

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

Запуск «Как администратор», казалось, добился цели.

...