Я пытаюсь запустить программу, которая ищет Java
предпочтения в Windows 10
, используя JDK 10.0.2
.Если он находит их под системным узлом, он пытается скопировать их на собственный узел пользователя, а затем пользователь может изменить их по своему вкусу.Мне не повезло ни в чтении, ни в написании предпочтений.Я попробовал несколько разных JDK в версии 8, а затем установил 10 на теории, что он может работать лучше, но это не так.
Моя программа - старая игра, которую я написал несколько лет назад.Он работал нормально, когда я запускал его в последний раз в 2012 году. (В тот момент я, вероятно, выполнял JDK 6
и Windows XP
.)
Я нашел код, использующий настройки, который немного прощечем мой собственный, в другом обсуждении 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 );
}
}
}
Results
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(Prefs01.java:13)
Судя по полученным сообщениям об ошибках, у меня сложилось впечатление, что у меня возникла какая-то проблема с авторизацией Windows: я не уполномочен делать то, чтоЯ пытаюсь сделать в реестре Windows.Это не имеет смысла для меня, потому что на этой машине есть только один UAC
, и он является администратором;Я не знаю ни одного способа запустить эту программу под другим UAC
, даже если на машине был еще один UAC
.
Может кто-нибудь пролить свет на то, что здесь происходит не так, и что мне нужно сделать, чтобы это исправить?