在Registry上将数据设置为子键时出错

时间:2017-12-05 10:07:19

标签: delphi registry

我正在尝试编写新密钥,即模式并为其分配一个值,我的系统是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;

1 个答案:

答案 0 :(得分:4)

KEY_READ为您提供了读取权限。但这对你来说还不够。您将True传递给CanCreate的{​​{1}}参数,因此需要OpenKey访问标记。然后你尝试写一个值,这需要KEY_CREATE_SUB_KEY访问标志。

您的问题可能是您的进程以没有足够权限的用户身份执行。您需要确保您的程序以足够的权限运行。通常这意味着以管理员身份运行它。使用应用程序清单强制执行该操作,或使用KEY_WRITE动词,以最适合您的应用程序的方法。