Не удается прочитать из реестра - HKEY_CLASSES_ROOT, если не работает в режиме администратора - PullRequest
1 голос
/ 18 июня 2010

Я не могу читать из реестра, если я не запустил свое приложение в режиме администратора. Я создаю обработчик предварительного просмотра, используя интерфейс IPreviewHandler, и мне требуются идентификаторы GUID для типов файлов, расположенных в HKEY_CLASSES_ROOT.

Как я могу получить доступ к этой информации, не подняв заявку до администратора. Я использую Delphi, но рад за любой пример кода.

Спасибо, Phillip

Ответы [ 4 ]

8 голосов
/ 18 июня 2010

Когда вы создаете объект TRegistry, по умолчанию запрашивается ALL_ACCESS.

Если вам нужно только прочитать значения, используйте

reg := TRegistry.Create(KEY_QUERY_VALUE);
6 голосов
/ 18 июня 2010

Чтобы добавить в ответ глобусы, вы также можете использовать метод TRegistry.OpenKeyReadOnly();.

1 голос
/ 19 июня 2010

Microsoft решила, что они больше не хотят, чтобы программисты возились с HKEY_CLASSES_ROOT, поэтому им необходим доступ в режиме администратора для доступа к ней в Windows 7 (и я верю в Vista).

Вместо этого они хотят, чтобы вы посмотрели в HKEY_CURRENT_USER, который должен содержать те же GUID, которые вам нужны, но специфичные для пользователя, вошедшего в систему.

Проверьте, есть ли нужные GUID в HKEY_CURRENT_USER. Если это так, получите доступ к ним, и вам не понадобится режим администратора для чтения или записи.

1 голос
/ 18 июня 2010

Я бы рекомендовал использовать константу KEY_READ вместо KEY_QUERY_VALUE:

рег: = TRegistry.Create (KEY_READ);

или

р: = TRegistry.Create;
reg.Access: = KEY_READ;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...