6

我不知道我的错误在哪里。总是跳转到else分支,但是key存在,我查了好几遍。

var
  reg : TRegistry;
begin
    with TRegistry.Create do try
      RootKey:=HKEY_CURRENT_USER;
      OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', False);
    if KeyExists('nginx.exe') then begin
      ShowMessage('Ja geht ist da');
      Result := True;
      btnAutostart.ImageIndex := 5
    end
    else begin
      Result := False;
      btnAutostart.ImageIndex := 0;
    end;
    finally
      Free;
    end;
end;
4

1 回答 1

13

你需要打电话ValueExists而不是KeyExists. 键是在 Regedit 中显示为文件夹的内容,但您正在寻找nginx.exe在键中命名的值HKCU\Software\...\Run

其他一些评论:

  1. 由于您只是从注册表中读取,请使用OpenKeyReadOnly而不是OpenKey.
  2. 检查返回值,OpenKeyReadOnly以防无法打开密钥。
  3. 如果您确实需要使用 HKLM 执行此操作(正如您在评论中所述),请在 64 位系统上运行 32 位进程时注意注册表重定向混淆。
于 2013-06-05T11:11:41.853 回答