Windows belügt mich...

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Stephan-VB-Schüler.

    Windows belügt mich...

    Hallo liebe vb-paradise-Mitglieder!

    Windows7 - 64Bit, ärgert mich heute hartnäckig.
    Ich möchte die Starteinträge unter
    " HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run " mit VB.net auslesen.
    Mit der Materie im Allgemeinen komme ich prima klar ... GetValue u.s.w ...

    Meine Schwierigkeit ist nur, dass ich immer die Einträge von
    " HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Run " ausgegeben bekomme...obwohl ich ja explizit nach dem
    oben genannten Pfad suche.

    Kennt jemand das Problem...kann mir jemand bei der Lösung helfen??? :whistling:

    Vielen Dank und ein schönes Wochenende an alle VB-Freunde!

    Stephan

    Das geht ja echt fix hier!

    Hallo erneut und danke für die schnellen Antworten!


    Weder ist
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
    eine Kopie von
    HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
    noch andersrum!

    In beiden Schlüsseln stehen völlig verschiedene Daten...
    Kann man auch prima mit z.B. AUTORUNS von sysinternal.com - überprüfen.

    So steht z.B. im oberen Schlüssel die 'Lcore-Software' von Logitec
    als auch dieser Realtek Audio-Manager

    im unteren Schlüssel aber nicht!
    Dafür finde ich dort den 'Avast' - Eintrag und z.B. den Catalyst-Start eintrag...


    Ünabhängig, welche Methode ich nutze, bekomme ich immer nur die Werte aus dem Zweig mit Wow6432Node...

    So bringt die Anfrage:

    Dim strPrim As String
    Dim strSec() As String = My.Computer.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run").GetValueNames()

    For o As Integer = 0 To strSec.Length - 1
    strPrim = Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", strSec(o), "")
    'Console.WriteLine("LocalMachine " & strSec(o) & " : " & strPrim)
    'INI_WriteValueToFile("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run ", o & " - ", strSec(o) & " : " & strPrim, ".\reginfo.ini")
    Next

    ...leiderdie Selben Ergebnisse wie:


    Dim strPrim1 As String
    Dim strSec1() As String =
    My.Computer.Registry.LocalMachine.OpenSubKey("SOFTWARE\Wow6432\Microsoft\Windows\CurrentVersion\Run").GetValueNames()

    For o As Integer = 0 To strSec1.Length - 1
    strPrim1 = Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432\Microsoft\Windows\CurrentVersion\Run", strSec1(o), "")
    'Console.WriteLine("LocalMachine " & strSec1(o) & " : " & strPrim1)


    'INI_WriteValueToFile("HKEY_LOCAL_MACHINE\Software\Wow6432\Microsoft\Windows\CurrentVersion\Run
    ", o & " - ", strSec1(o) & " : " & strPrim1, ".\reginfo.ini")
    Next


    ....

    Habe auch schon verschiedene Methoden getestet...Windows lügt mir immer die Einträge aus dem Wow6432 - Zweig vor...

    Bin da gerade echt ratlos...

    Viele Grüße
    Stephan
    Unter einem 64-Bit-Windows werden 32-Bit-Anwendungen (also auch deine) im "WOW64-Subsystem" ausgeführt:
    de.wikipedia.org/wiki/WOW64

    Anwendungen, die in diesem Modus ausgeführt werden, verwenden an bestimmten Stellen in der Registry nicht direkt den eigentlichen Schlüssel, sondern Wow6432Node-Unterschlüssel. Das ist eigentlich auch so gewünscht. Falls du aber mit deiner 32-Bit-Anwendung in den Einträgen von 64-Bit-Anwendungen herumpfuschen willst, schau dir die RegistryView-Enumeration an:

    msdn.microsoft.com/en-us/libra…t.win32.registryview.aspx
    Wie du die Enumeration verwenden musst/kannst, steht unter Remarks.

    Alternativ, kannst du auch einfach AnyCPU als Plattform angeben, dann bekommst du standardmäßig den von dir gewünschten Pfad.

    Das nenne ich hilfreich!

    Hallo an's Forum und Dank an alle Antwortenden.

    Infinity bekommt dieses Jahr 'ne Weihnachtskarte!
    Es handelt sich hier eigentlich nur um ein Schul-Projekt. Meine Anwendung soll sich einen Autostart-Eintrag in der Registry sichern.
    Auf den Rechnern in der Schule (32Bit) hat ja auch alles geklappt, nur bei mir zu Hause nicht mehr.

    Alternativ, kannst du auch einfach AnyCPU als Plattform angeben, dann
    bekommst du standardmäßig den von dir gewünschten Pfad.
    Dieser Rat führt zur Lösung. Ich vermute dass dies der einfachste Weg für mich ist.
    Die RegistryView-Enumeration werde ich natürlich auch noch testen, jedoch ist mein Ziel
    ja hier auch schon erreicht.

    Damit kann ich das Thema schliessen und bedanke mich nochmals für die Hilfen!
    ...die nächste Frage kommt bestimmt... :whistling:

    Viele Grüße
    Stephan