Сбой при создании компонента под администратором UAC, работает без повышения UAC - PullRequest
1 голос
/ 13 апреля 2011

У меня .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);

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

...