2011-02-09 16 views
38

Utilizamos las preferencias de Java en algunas de nuestras aplicaciones y realmente no lo hemos notado, ya que la utilidad que realiza las llamadas es bastante antigua y se escribió en Windows XP. Pero parece que las preferencias de Java ya no están almacenadas en el registro de Windows 7, o están almacenadas en otro lugar.¿Dónde están almacenadas las preferencias de Java en Windows 7?

Estoy esperando que sea en:

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs

Pero yo no lo veo allí.

Lo que lo hace wierder, es que cuando corro esta aplicación:

public static void main(final String[] args) throws BackingStoreException { 

    Preferences systemRoot = Preferences.systemRoot(); 
    Preferences preferences = systemRoot.node("com/mycompany/settings"); 

    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); 
    } 
} 

En realidad, escribe (que puedo comentar al apagar y volver a ejecutarlo y funciona) pero no ver el nuevo llaves en el registro.

Además, no puedo ver esto documentado en ninguna parte. Gracias por adelantado.

EDIT # 1 La única razón por la que esto es importante es porque la configuración cambia según el entorno en el que se ejecuta. Dicho esto, a menudo es útil simular ese entorno insertando las claves de registro manualmente y luego haciendo alguna comprobación.

Me estaba ejecutando como administrador, pero no vi las claves en el registro donde esperaba que estuvieran.

+2

Usted podría utilizar Sysinternals Process monitor para ver el registro y operaciones del sistema de archivos para ese proceso y tratar de deducir hacia dónde se dirigen las lecturas/escrituras. –

+1

¿Por qué debería almacenar algo en 'HKEY_LOCAL_MACHINE'? Esperaría que viviera bajo ['HKEY_CURRENT_USER'] (http://en.wikipedia.org/wiki/Windows_Registry#HKEY_CURRENT_USER_.28HKCU.29). Además: ¿por qué te importa? No está documentado por una razón: no debes confiar en él y puede cambiar en cualquier momento. –

+0

debe estar allí: por cierto ¿se está ejecutando como administrador? – bestsss

Respuesta

20

para SystemRoot: HKEY_LOCAL_MACHINE \ SOFTWARE \ JavaSoft ...

para userRoot: HKEY_CURRENT_USER \ SOFTWARE \ JavaSoft ...

+0

¿Has confirmado esto? Ejemplo: ¿Usa el código anterior y luego verifica tu registro? No aparece en regedit para mí. – javamonkey79

+0

mira esto? http://msdn.microsoft.com/en-us/library/aa965884%28v=vs.85%29.aspx – bestsss

+0

Sí, parece una explicación plausible. Sin embargo, tampoco puedo encontrar las claves en las ubicaciones virtuales. Hmm ... – javamonkey79

45

Están bajo usuario actual: HKEY_CURRENT_USER\Software\JavaSoft\Prefs

+0

¿Has confirmado esto? Ejemplo: ¿Usa el código anterior y luego verifica tu registro? No aparece en regedit para mí. – javamonkey79

+0

La configuración del usuario está en HKCU, la configuración del sistema en HCKS (a menos que la sobrescriba con variables del sistema). La ruta en las ventanas de 64 bits con java de 32 bits, sin embargo, está en WoW64, como se respondió anteriormente. – eckes

+0

Todavía estoy trabajando en Windows 10. +1 – JCoder

13

que tenía una problema similar cuando trabajé con las preferencias de SystemRoot y con la ayuda de un monitor de registro descubrí que la ubicación donde están almacenados cambia dependiendo de si el sistema operativo de Windows es de 32 bits o de 64 bits.

Bajo de 32 bits del sistema operativo (Windows XP en mi caso) la ruta del registro SystemRoot fue

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs

Bajo SO de 64 bits (Windows 7 en mi caso) la ruta del registro SystemRoot era

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs

Se usó el mismo JRE de 32 bits (JRE 1.6.0_20-b02) en ambos sistemas.

Al ejecutar una aplicación de 32 bits (la JVM) en una ventana de 64 bits, el registro inserta automáticamente el elemento de ruta Wow6432Node para permitir que las aplicaciones compiladas para 32 bits o 64 bits coexistan en el mismo máquina mientras mantiene sus configuraciones separadas.

+0

en Windows 7 de 64 bits No veo ningún prefs en HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ JavaSoft, pero los veo en HKEY_CURRENT_USER \ Software \ JavaSoft \ Prefs – sdjuan

1

Algunas preferencias se almacenan en claves de registro, mientras que algunas otras (ahora voy a comprobar exactamente cuáles) parecen almacenadas en archivos de texto; por ejemplo, la preferencia "usar certificados y claves del almacén de claves del navegador" se almacena en C:\Users\%USER%\AppData\LocalLow\Sun\Java\Deployment\deployment.properties:

#deployment.properties 
#Thu Jun 12 15:26:53 CEST 2014 

deployment.security.browser.keystore.use=false 

deployment.modified.timestamp=1402579613914 
deployment.version=7.21 
deployment.browser.path=C\:\\Program Files\\Mozilla Firefox\\firefox.exe 
#Java Deployment jre's 
#Thu Jun 12 15:26:53 CEST 2014 
deployment.javaws.jre.0.registered=true 
deployment.javaws.jre.0.platform=1.7 
deployment.javaws.jre.0.osname=Windows 
deployment.javaws.jre.0.path=C\:\\Program Files\\Java\\jre7\\bin\\javaw.exe 
deployment.javaws.jre.0.product=1.7.0_60 
deployment.javaws.jre.0.osarch=x86 
deployment.javaws.jre.0.location=http\://java.sun.com/products/autodl/j2se 
deployment.javaws.jre.0.enabled=true 
deployment.javaws.jre.0.args= 

Esto se verificó en Windows 7 Pro/32 bits - JRE 1.7.0_60 (i586)

fuentes:
Related question on this site
Oracle - Java SE documentation - Deployment Configuration File and Properties

tenga un buen día

+2

Eso es probablemente un " archivo de propiedades "administrado con' java.util.Properties', una API muy básica introducida en Java 1.0. El tema de la pregunta es la API de Preferencias, un mecanismo mucho más sofisticado introducido en Java 1.4. Cada uno tiene su propia área de aplicabilidad, sin embargo. –

Cuestiones relacionadas