Я пытаюсь запустить программу, которая ищет Java
предпочтения в Windows 10
, используя JDK 10.0.2
. Если он находит их в системном узле, он пытается скопировать их в собственный узел пользователя, а затем пользователь может изменить их по своему вкусу. Мне не везет ни в чтении, ни в письме. Я пробовал несколько разных JDK в версии 8, а затем установил 10, исходя из теории, что она может работать лучше, но это не так.
Моя программа — это старая игра, которую я написал несколько лет назад. В последний раз, когда я запускал его в 2012 году, он работал нормально.
Я нашел некоторый код, использующий настройки, который немного проще моего собственного, в другом обсуждении StackOverflow, немного изменил его и попытался запустить, чтобы посмотреть, смогу ли я придумать легко воспроизводимый пример:
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;
public class Prefs01 {
public static void main( final String[] args ) throws BackingStoreException {
Preferences systemRoot = Preferences.systemRoot();
Preferences preferences = systemRoot.node("fuzz");
systemRoot.put( "foo", "bar" );
systemRoot.put( "baz", "lolz" );
System.out.println( "-------------------------------" );
String[] keys = preferences.keys();
for( String key : keys ) {
System.out.println( key );
}
System.out.println( "-------------------------------" );
keys = systemRoot.keys();
for( String key : keys ) {
System.out.println( key );
}
}
}
Результаты
Preferences systemRoot = Preferences.systemRoot();
Отладчик показывает, что systemRoot стоит "/" после этого оператора; ошибок пока нет.
Preferences preferences = systemRoot.node("fuzz");
Консоль выдает такое сообщение:
Oct 01, 2018 5:05:24 PM java.util.prefs.WindowsPreferences <init>
WARNING: Could not create windows registry node Software\JavaSoft\Prefs\fuzz at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
systemRoot.put( "foo", "bar" );
Консоль выдает это сообщение и трассировку стека:
01 октября 2018 г. 17:09:38 java.util.prefs.WindowsPreferences openKey ПРЕДУПРЕЖДЕНИЕ. Не удалось открыть узел реестра Windows Software\JavaSoft\Prefs в корневом каталоге 0x80000002. Windows RegOpenKey(...) вернул код ошибки 5. Исключение в потоке "main" java.lang.SecurityException: не удалось открыть узел реестра Windows Software\JavaSoft\Prefs в корневом каталоге 0x80000002: доступ запрещен в java.prefs/java.util. prefs.WindowsPreferences.openKey(WindowsPreferences.java:553) в java.prefs/java.util.prefs.WindowsPreferences.openKey(WindowsPreferences.java:515) в java.prefs/java.util.prefs.WindowsPreferences.openKey(WindowsPreferences. java:501) в java.prefs/java.util.prefs.WindowsPreferences.putSpi(WindowsPreferences.java:652) в java.prefs/java.util.prefs.AbstractPreferences.put(AbstractPreferences.java:263) в Prefs01.main (Превс01.java:13)
Основываясь на сообщениях об ошибках, которые я получаю, у меня сложилось впечатление, что у меня есть какая-то проблема с авторизацией Windows: я не авторизован делать то, что я пытаюсь сделать в реестре Windows. Для меня это не имеет смысла, потому что на этой машине есть только один UAC
, и он является администратором; Я не знаю, как запустить эту программу под другим UAC
, даже если на машине есть другой UAC
.
Может ли кто-нибудь пролить свет на то, что здесь происходит не так, и что мне нужно сделать, чтобы это исправить?
BackingStoreException
». Если вы хотите указать внутренние значения по умолчанию, сохраните их как импортируемый ресурс XML в вашем приложении. - person VGR   schedule 02.10.2018