2013-11-21 1 views
0

У нас есть COM-видимая сборка .NET. Эта сборка регистрируется через «регистрацию COM каждого пользователя» путем добавления записей реестра в HKCU с правами администратора. Сборка успешно зарегистрирована, и COM-объект может быть создан без проблем для пользователей..NET сборка не может быть найдена в отладчике, если только зарегистрирована в HKCU

Однако в отладчике, таком как Visual Studio 2010, если я хочу использовать CoCreateInstance() один из COM-объектов в сборке, возвращается код ошибки 0x80040154, который является «Class not registered». Этого не произошло, когда мы раньше использовали «regasm.exe/codebase * .dll». Я проверил, что regasm.exe добавляет записи реестра в HKLM. Вот мои вопросы:

  1. Отладчик, Visual Studio 2010 в моем случае, только находит реестр из HKLM вместо поиска в HKCU?
  2. Это правда, что regasm.exe регистрирует сборку только в HKLM?

Большое спасибо за любые ответы.

ответ

2

, добавив записи реестра в HKCU с привилегией администратора.

Использование HKCU является хрупким. Существует только один сценарий, в котором это может работать должным образом, привилегия администратора должна быть получена точной учетной записью пользователя, которая запускает программу. Это может произойти только тогда, когда вы получили повышение UAC, как правило, запустив cmd.exe с параметром «Запуск от имени администратора».

Если вы получили привилегию администратора с другой учетной записью, то ключи записываются в разные HKCU. Другими словами, другой под-ключ HKEY_USERS.

1) И затем ваша программа, которая не может найти ключи. Отладчик не задействован.

2) Именно поэтому Regasm.exe поддерживает только запись HKLM и не имеет возможности писать в HKCU. Избегает вызовов поддержки.

+0

Спасибо @ Ханс. Во всех сценариях я единственный пользователь, и у меня есть привилегия администратора. 1) Моя программа была запущена в VS2010, которая имеет привилегию администратора. Я думал, что независимо от того, где зарегистрирована сборка, моя программа должна искать в HKCR, что я проверил ProgID. Вы согласны со мной? – Chloe

+0

Не уверен, с чем вы согласны. Если это только для частного использования, и у вас есть привилегии администратора, то нет смысла использовать HKCU. –

+0

:) Я хотел знать, согласны ли вы со мной, что HKCR - это улей, который моя программа ищет в записи реестра сборщика. – Chloe