Ran*_*Ran 2 windows delphi registry privileges uac
我有一个小的Delphi应用程序,它将一个密钥写入LOCAL_MACHINE注册表.当我在具有管理员权限的用户的Windows 7专业版上运行它时,它无法写入值,但是当我右键单击并选择"以管理员身份运行"时,它确实有效.
代码是:
var
reg : TRegistry;
begin
Result := false;
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
if (reg.OpenKey('Software\YepYep', TRUE)) then
Begin
try
reg.WriteString('ProductKey', Trim(ProductKey));
Result := true;
finally
reg.CloseKey();
end;
End;
reg.Free;
end;
Run Code Online (Sandbox Code Playgroud)
计算机UAC设置设置为"仅在程序尝试更改计算机时通知"(第二低级别).当我把它归结为"从不通知"它也可以工作(不需要使用"以管理员身份运行").
如果您对可能存在的问题有任何想法/想法,我将不胜感激.
谢谢.
Dav*_*nan 16
简而言之,用户需要管理员权限才能写入HKLM.同样用于写入系统目录(system32,程序文件).对于实现安全性的Windows版本(NT,2k,XP,Vista,7),情况一直如此.
在UAC下,管理员组中的用户默认使用标准用户令牌运行进程.所以他们没有获得HKLM等的写入权限.
在继续前进之前,你真的需要阅读UAC.从这里开始.
熟悉问题后,您有两个主要选择:
requireAdministrator向应用程序添加清单,以便它始终以提升的权限运行.这意味着用户每次启动应用程序时都必须协商UAC对话框.在这两个选项中,数字2绝对是首选.请记住,对于非管理员用户,您的应用程序已经无法在2000/XP上运行.