В 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 не сообщал об ошибке, но в реестр ничего не записывалось.
Запуск "Как администратор", казалось, сделал свое дело.