如果未在管理员模式下运行,则无法从注册表中读取 - HKEY_CLASSES_ROOT

时间:2010-06-18 02:05:30

标签: visual-studio delphi registry

除非我以管理员模式运行我的应用程序,否则无法从注册表中读取。我正在使用IPreviewHandler接口构建预览处理程序,并且我需要位于HKEY_CLASSES_ROOT中的文件类型的GUID。

如何在不将我的应用程序提升为管理员的情况下访问此信息。我正在使用Delphi,但对任何示例代码感到高兴。

谢谢, 菲利普

4 个答案:

答案 0 :(得分:8)

创建TRegistry对象时,默认情况下会请求ALL_ACCESS

如果您只需要阅读值,请使用

reg := TRegistry.Create(KEY_QUERY_VALUE);

答案 1 :(得分:6)

要添加到globs答案,您还可以使用TRegistry.OpenKeyReadOnly();方法。

答案 2 :(得分:1)

我建议使用KEY_READ常量而不是KEY_QUERY_VALUE:

REG:= TRegistry.Create(KEY_READ);

或:

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

答案 3 :(得分:1)

微软已经决定他们不再希望程序员不再使用HKEY_CLASSES_ROOT,因此需要管理员模式访问才能在Windows 7中访问它(我相信Vista也是如此)。

相反,他们希望您查看HKEY_CURRENT_USER,它应包含您需要的相同GUID,但特定于当前登录的用户。

查看您需要的GUID是否在HKEY_CURRENT_USER中。如果是这样,请访问它们,您无需管理员模式进行阅读或写作。

相关问题