Wert aus Registry auslesen

  • VB.NET

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von GermanElectronix.

    Wert aus Registry auslesen

    Hallo vb-Paradise User,

    ich habe folgendes Problem:
    Ich möchte meine Java JRE Version aus der Registry auslesen. Ich weiß, wo sich diese Werte befinden und habe auch den genauen Pfad. Ich habe es folgendermaßen versucht:

    VB.NET-Quellcode

    1. Dim jreversion As String
    2. Dim jrepath As String
    3. Sub getjava()
    4. jreversion = Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment", "CurrentVersion", MsgBox("Fehler!"))
    5. jrepath = Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment" & jreversion, "JavaHome", MsgBox("Fehler!"))
    6. End Sub

    Dann habe ich im FormLoad Ereignis diese Sub aufgerufen. Daraufhin erscheint die MessageBox mit dem Text "Fehler!", wie von mir festgelegt. Warum kann das Programm auf die Registry nicht zugreifen? Ich hoffe ihr könnt mir helfen :)

    Liebe Grüße
    GermanElectronix

    VB.NET-Quellcode

    1. Sub getjava()
    2. Dim jreversion As String = ""
    3. Dim jrepath As String = ""
    4. jreversion = Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment", "CurrentVersion", "")
    5. jrepath = Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment" & jreversion, "JavaHome", "")
    6. MsgBox(jreversion)
    7. MsgBox(jrepath)
    8. End Sub


    Da wird dir schonmal die richtige Version angezeigt. JrePath ist jedoch noch leer.

    EDIT: JrePath wird nun auch angezegit :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „backtothetoast“ ()

    VB.NET-Quellcode

    1. Dim jreversion As String = ""
    2. Dim jrepath As String = ""
    3. Sub getjava()
    4. jreversion = Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment", "CurrentVersion", "")
    5. jrepath = Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment" & jreversion, "JavaHome", "")
    6. MsgBox(jreversion)
    7. MsgBox(jrepath)
    8. End Sub

    Auch da werden mir noch zwei leeren MessageBoxen ausgegeben (auch als Administrator) :S
    Kannst Du im RegEdit Diese Werte einsehen?
    Ohne und mit Admin-Rechten:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    GermanElectronix schrieb:

    Adminrechte
    Mit diesen so:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Für HKEY_LOCAL_MACHINE sind sowohl für den Lesezugriff als auch für den Schreibzugriff Administratorrechte notwendig. Nur HKEY_LOCAL_USER kann man ohne Rechte lesen und schreiben. Demnach war der Tipp mit den Administratorrechten goldrichtig, ansonsten liegt der Fehler wohl an einer anderen Stelle.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    @GermanElectronix:: Fang an mit Option strict On und wisse, wo der Pfadf steht. Dann klappt es auch mit der Nachbarin. :D

    VB.NET-Quellcode

    1. Imports Microsoft.Win32
    2. Public Class Form1
    3. Private jreversion As String
    4. Private jrepath As String
    5. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    6. jreversion = Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment", "CurrentVersion", "").ToString
    7. jrepath = Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment" & jreversion.ToString, "JavaHome", "").ToString
    8. MessageBox.Show(jreversion & Environment.NewLine & jrepath)
    9. End Sub
    10. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    GermanElectronix schrieb:

    "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment" & jreversion

    Mindestens das kann nicht funktionieren, denn da würde das Pfad-Trennzeichen zwischen "Java Runtime Environment" und dem Versions-String fehlen.
    Aber das erklärt auch nicht, warum schon die Version nicht gelesen werden kann.
    Meine Kristallkugel sagt mir, es liegt daran, dass du mit einer 32-Bit-Anwendung (Zielplattform "x86") versuchst, die 64-Bit-Registry auszulesen.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.

    Arby schrieb:

    und dem Versions-String fehlen.
    Da haben wir ja glatt einen Fehler im Forum gefunden, in meinem Bild ist er da, im Quelltext nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Da haben wir ja glatt einen Fehler im Forum gefunden, in meinem Bild ist er da, im Quelltext nicht.

    Tatsache. Das Bild hatte ich gar nicht betrachtet, aber du hast recht. Vermutlich denkt der Syntax-Highlighter, das "\" wäre im Zusammenhang mit dem direkt nachfolgenden doppelten Anführungszeichen ein C/C++/C#-Escapecharacter.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Arby“ () aus folgendem Grund: Vermutung etwas detailliert...

    Das ist dann ein deutliches Zeichen, dass die Assembly "MC Server Administration" nur als 32-Bit-Komponente vorliegt. Leider lassen sich 64-Bit- und 32-Bit-Anwendungen und -DLLs nicht in einem Prozess mischen. Wenn du auf diese Assembly angewiesen bist, wird dir nichts übrig bleiben als weiterhin für x86 zu kompilieren, dann aber dich darüber zu informieren, wie man aus einem 32-Bit-Prozess heraus Zugriff auf die 64-Bit-Registry erlangt. (Ja, das muss irgendwie gehen, ich hab nur grad nicht im Kopf, wie, und auch keinen Link parat, wo es erklärt wird.)
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.