2017-01-04 3 views
0

Ich habe eine 32-Bit-Anwendung, die die Registrierung liest und sucht nach einem Wert in HKEY_LOCAL_MACHINE \ Software \ MyApp \, aber bei 64-Bit-Versionen von Windows ist der Wert unter HKEY_LOCAL_MACHINE \ Software \ Wow6432Node \ MeineApp. Aber meine Anwendung sieht immer noch für einen Wert in HKEY_LOCAL_MACHINE \ Software \ MyApp \Wie aktiviert und deaktiviert KEY_WOW64_32KEY in Java-Programm

I com.zerog.ia.api.pub.SimpleRegistryManager api auf Registry Manipulation Diese Klasse verwendet bin mit dem Win32-System-Registry zuzugreifen.

In Bezug auf MSDN, Das Flag KEY_WOW64_32KEY wird verwendet, um auf einen 32-Bit-Schlüssel von einer 32-Bit- oder 64-Bit-Anwendung zuzugreifen. https://msdn.microsoft.com/en-us/library/windows/desktop/aa384129(v=vs.85).aspx

So ist jede mögliche Weise KEY_WOW64_32KEY Flagge mit Java api

+0

Vielleicht [http://stackoverflow.com/questions/2011554/disabling-registry-redirection-for-registry-key-on-an-x64-platform] wird helfen. – DevilsHnd

Antwort

0

Ich vermute, dass das Programm zu aktivieren oder deaktivieren wird nur ohne Änderungen funktionieren, wenn es unter der 32-Bit läuft Version von java.exe. Können Sie die 32-Bit java.exe auf dem 64-Bit-System ausführen und sehen, ob es funktioniert?

Mein Rat wäre, this link auf, wie Sie feststellen, ob Ihr Programm unter 32-Bit-oder 64-Bit-VM ausgeführt wird. Ändern Sie dann den Code so, dass er auf den Wow64-Registrierungsschlüsselpfad verweist, wenn er auf 64-Bit ausgeführt wird.

Ich bin nicht vertraut mit der Klasse SimpleRegistryManager, die Sie sprechen, aber es ist auch möglich, dass die Implementierung versucht, die KEY_WOW_Flag basierend auf VM-Typ und widersprüchlich mit dem, was Sie wirklich tun wollen.

Dies ist kein ungewöhnlicher Fehler für Entwickler unter Windows. (Vor allem, wenn Sie mit verschiedenen 32-Bit- und 64-Bit-Anwendungen auf 64-Bit-Fenstern kommunizieren.) Manche Leute nehmen einen faulen Blick. Wenn der Registrierungsschlüssel versucht, den Registrierungsschlüssel zu lesen, wenn der Schlüssel in HKLM\Software\MyApp nicht vorhanden ist, fällt der Code zurück zu dem Versuch, den Schlüssel von HKLM\Software\Wow6432Node\MyApp zu lesen.

+0

Ja, ich kann die 32-Bit-java.exe auf dem 64-Bit-System und seiner Arbeitsproperität ausführen. Registry-Eintrag auch in WOW6432Node gespeichert. Es ist möglich, dass die Implementierung, die versucht, die KEY_WOW_flag übergeben, so wie KEY_WOW_flag aktivieren, bevor Sie den Schlüssel anfordern. Gibt es einen Java-API oder einen Java-Ansatz? –

+0

Wenn Ihr Code feststellt, dass er auf 64-Bit-Java ausgeführt wird, fordert er 'HKEY_LOCAL_MACHINE \ Software \ Wow6432Node \ MyApp' an, andernfalls wird die Anforderung bei 32-Bit-Java mit' HKEY_LOCAL_MACHINE \ Software erstellt \ MeineApp'. Wird das nicht für dich funktionieren? – selbie

+0

Problem wurde gelöst, in der letzten Version meiner Anwendung, ich hatte es mit 32-Bit-Installer zu bauen, aber versehentlich hatte ich JRE 64 Bit statt JRE 32 Bit verwendet, als Ergebnis wurde Problem ausgelöst. Heute habe ich es mit JRE 32 Bit neu aufgebaut, jetzt funktioniert es wie erwartet Dank @selbie für Ihr leisten für die Suche nach Informationen, es half mir Route Ursache des Problems zu erreichen. –

Verwandte Themen