删除注册表项返回 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);
}
}
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);
}
}