У меня .NET COM dll с пользовательской процедурой регистрации, поэтому он регистрируется в HKEY_CURRENT_USER \ Software \ Classes в отличие от HKEY_LOCAL_MACHINE . Таким образом, есть следующие ключи (текущий пользователь является администратором на ПК с Windows 7):
HKEY_CURRENT_USER\Software\Classes\My.ProgId\CLSID
HKEY_CURRENT_USER\Software\Classes\CLSID\{XYZZYZYZYZ-YZYZY-ZYZYZY} etc
Если я создаю простой клиент C ++:
hr = CLSIDFromProgID(OLESTR("My.ProgId"), &clsid);
и запустите его без Повышение UAC (Windows 7) , компонент будет успешно создан.
С другой стороны, если я запускаю с повышением прав, он завершается с Invalid class string
.
Я проверил с помощью монитора процессов, когда он работает, он ищет ключ HKCU \ Software \ Classes \ My.ProgID , и он открывается нормально. Когда происходит сбой (повышение), он ищет HKCR \ My.ProgId и ошибки с NAME NOT FOUND
. Открытие ключа реестра вручную из classes_root
успешно, хотя:
HKEY key;
RegOpenKey( HKEY_CLASSES_ROOT, _T( "My.ProgId"), &key);
Пожалуйста, помогите! Спасибо