Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 删除注册表项Win64/32_Delphi_Registry - Fatal编程技术网

Delphi 删除注册表项Win64/32

Delphi 删除注册表项Win64/32,delphi,registry,Delphi,Registry,我正在尝试使用Delphi删除一个Windows密钥,但是没有成功,它遵循我正在使用的代码 Function DeleteKeyAPI(hRoot: HKEY; sPath: String; IsReg64: BOOL): BOOL; Var iRet: Integer; Begin If IsReg64 Then iRet := RegDeleteKeyEx(hRoot, PChar(sPath), KEY_WOW64_64KEY, 0) Else iRet :=

我正在尝试使用Delphi删除一个Windows密钥,但是没有成功,它遵循我正在使用的代码

Function DeleteKeyAPI(hRoot: HKEY; sPath: String; IsReg64: BOOL): BOOL;
Var
  iRet: Integer;
Begin
  If IsReg64 Then
    iRet := RegDeleteKeyEx(hRoot, PChar(sPath), KEY_WOW64_64KEY, 0)
  Else
    iRet := RegDeleteKeyEx(hRoot, PChar(sPath), KEY_WOW64_32KEY, 0);

  If iRet = ERROR_SUCCESS Then
    Result := True
  Else
    Result := False;
End;
在某些密钥中,我可以删除多个在自己的Regedit me中有拒绝访问错误的密钥

我如何解决这个问题

编辑-----------------------

我试着做如下事情,但没有成功

function SHDeleteKey(key: HKEY; pszSubKey: LPCTSTR): DWORD; stdcall;

implementation

{$R *.dfm}

function SHDeleteKey; external 'shlwapi.dll' name 'SHDeleteKeyA';

procedure TForm1.FormCreate(Sender: TObject);
begin
  SHDeleteKey(HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run\AdobeCS6ServiceManager');
end;

您应该检查
iRet
的值以了解更多信息。这是一个Win32错误代码,将提供故障原因的更多详细信息

从:

要删除的子项不能有子项。要删除一个键及其所有子键,需要枚举子键并分别删除它们。要递归删除键,请使用RegDeleteTree或SHDeleteKey函数

这是一种常见的故障模式,即您试图删除的子项本身具有子项。我不确定错误代码是什么,可能是
error\u DIR\u not\u EMPTY

另一种常见的故障模式是指定的子项不存在。这将导致错误代码
error\u PATH\u NOT\u FOUND
或者
error\u FILE\u NOT\u FOUND

最后,我想真正的问题是,您无法获得密钥的删除权限。由于您使用的是备用注册表标志,我怀疑您试图删除HKLM下的子项。您的流程需要足够的权限才能执行此操作。通常这意味着作为提升的管理员用户运行。如果您没有足够的权限,您将获得
错误\u访问\u拒绝


关于您的编辑,
AdobeCS6ServiceManager
是一个值而不是一个键。您需要的函数是
RegDeleteValue
。阅读有关注册表的信息,了解这些术语的含义:


此外,令人失望的是,您询问了一个关于
RegDeleteKeyEx
的问题,然后编辑以显示调用
SHDeleteKey
的代码。请尽量坚持原来的问题。

即使以管理员身份运行它也不会删除密钥,regedit own(也以管理员身份运行)会返回以下错误:“无法删除所有指定值”。如果找不到
iRet
的值,则很难知道该说什么。您确定不可能获得该值吗?这是一个值而不是键。请不要再改变这个问题了。我的回答是准确的。你需要退后一步,停止随意的黑客攻击。认为了解键和值之间的区别。您正在尝试删除一个值。做些调查。不要疯狂地连枷。