删除注册表项返回 null - 不确定为什么

Removing registry keys is returning null - not sure why

     for (String path : regPath) {
                    if (WinRegistry.readStringSubKeys(WinRegistry.HKEY_CURRENT_USER, path) == null) {
                        System.out.println(path + " was null.");
                        continue;
                    }

                    List<String> ls = WinRegistry.readStringSubKeys(WinRegistry.HKEY_CURRENT_USER, path);
                    if (ls == null || ls.isEmpty()) {
                        return;
                    } else {
                        for (String sub : ls) {
                            sub = path + "\" + sub;
                            System.out.println(sub);
                            if (WinRegistry.readStringSubKeys(WinRegistry.HKEY_CURRENT_USER, sub) == null) {
                                System.out.println(path + " was null.");
                                continue;
                            }
                            ls = WinRegistry.readStringSubKeys(WinRegistry.HKEY_CURRENT_USER, sub);
                            if (ls == null || ls.isEmpty()) {
                                return;
                            } else {
                                for (String subKey : ls) {
                                    subKey = sub + subKey;
                                    System.out.println(subKey);
                                }
                            }

                            System.out.println(sub);
                        }
                    }
                }

从一个答案中我想出了这个!我怎样才能让它通过给定路径的所有键?

我需要清除上次 activity 查看器的所有信息,here 它为您提供了我需要删除的注册表值。

用于删除注册表项的 API 是 WinRegistry.deleteKey(int hkey, String key)。 但如果 sub-key 存在,它会抛出 java.lang.IllegalArgumentException: rc=5 key=???

要递归删除注册表项,您应该实现如下方法:

private static void deleteKeyAndSub(int hkey, String key) 
    throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
  List<String> ls = WinRegistry.readStringSubKeys(hkey, key);
  if(ls == null) {
    return;
  } else if(ls.isEmpty()) {
    WinRegistry.deleteKey(hkey, key);
  } else {
    for (String subkey : ls) {
      subkey = key+"\"+subkey;
      //System.out.println("delete subkey - "+subkey);
      deleteKeyAndSub(hkey, subkey);
    }
    WinRegistry.deleteKey(hkey, key);
  }
}