我正在尝试编写新密钥,即模式并为其分配一个值,我的系统是32位,代码如下。我收到以下代码的错误,因为无法为模式设置数据我已尝试通过设置不同的参数进行所有整改,但是没有成功。我总是要像使用KEY_WRITE一样保持reg.Access到KEY_READ,它不会在reg.OpenKey方法中打开子键。
reg := TRegistry.Create(KEY_READ);
reg.RootKey := HKEY_LOCAL_MACHINE;
if (not reg.KeyExists('\Software\MyApp\appname\')) then
begin
MessageDlg('Key not found! Created now.', mtInformation, mbOKCancel, 0);
end;
reg.Access:= KEY_READ;
openResult := reg.OpenKey('\Software\MyApp\appname\',True);
if not openResult = True then
begin
MessageDlg('Unable to create key! Exiting.', mtError, mbOKCancel, 0);
Exit();
end;
if not reg.KeyExists('Mode') then
begin
reg.WriteString('Mode','trial');
end;
答案 0 :(得分:4)
KEY_READ
为您提供了读取权限。但这对你来说还不够。您将True
传递给CanCreate
的{{1}}参数,因此需要OpenKey
访问标记。然后你尝试写一个值,这需要KEY_CREATE_SUB_KEY
访问标志。
您的问题可能是您的进程以没有足够权限的用户身份执行。您需要确保您的程序以足够的权限运行。通常这意味着以管理员身份运行它。使用应用程序清单强制执行该操作,或使用KEY_WRITE
动词,以最适合您的应用程序的方法。