Сбой при создании компонента под управлением администратора UAC, работает без повышения прав доступа

#com #registry #registration #win32com

#com #реестр #Регистрация #win32com

Вопрос:

У меня есть .NET COM dll с пользовательской процедурой регистрации, поэтому она регистрируется в разделе HKEY_CURRENT_USER Software Classes, в отличие от HKEY_LOCAL_MACHINE. Итак, есть следующие ключи (текущий пользователь является администратором на ПК с Windows 7):

 HKEY_CURRENT_USERSoftwareClassesMy.ProgIdCLSID
HKEY_CURRENT_USERSoftwareClassesCLSID{XYZZYZYZYZ-YZYZY-ZYZYZY} etc
  

Если я создам простой клиент C :

 hr = CLSIDFromProgID(OLESTR("My.ProgId"), amp;clsid); 
  

и запустите его без прав доступа (Windows 7), компонент создается успешно.
С другой стороны, если я запускаю с повышением прав вкл, происходит сбой с Invalid class string .

Я проверил с помощью process monitor, когда он работает, он ищет ключ HKCU Software Classes My.ProgID, и он открывается нормально. При сбое (повышение включено) выполняется поиск HKCR My.ProgID и ошибок с NAME NOT FOUND . Открытие раздела реестра вручную из classes_root выполнено успешно, хотя:

 HKEY key;
RegOpenKey( HKEY_CLASSES_ROOT, _T( "My.ProgId"), amp;key);
  

Пожалуйста, помогите! Спасибо

Комментарии:

1. Похоже, это связано с этим msdn.microsoft.com/en-us/library/bb756926.aspx

2. Кто-нибудь знает обходной путь? Есть ли какие-либо другие разделы реестра, которые я должен добавить, чтобы он работал с повышением прав?