除非我以管理员模式运行我的应用程序,否则无法从注册表中读取。我正在使用IPreviewHandler接口构建预览处理程序,并且我需要位于HKEY_CLASSES_ROOT中的文件类型的GUID。
如何在不将我的应用程序提升为管理员的情况下访问此信息。我正在使用Delphi,但对任何示例代码感到高兴。
谢谢, 菲利普
答案 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中。如果是这样,请访问它们,您无需管理员模式进行阅读或写作。