Registrierungszugriff Debug vs Release

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von pts.

    Registrierungszugriff Debug vs Release

    Moin!

    Ich hab hier eine kleine Herausforderung: Ich lese die Produkt-ID eines PCs folgendermaßen aus:

    VB.NET-Quellcode

    1. Dim ProductID = Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductId", Nothing)


    Das funktioniert wunderbar, wenn ich das Programm als "DEBUG" starte (egal ob im Visual Studio oder direkt über den Explorer).

    Wenn ich aber ein "Release" erzeuge, bekomme ich nichts zurück. ?( Ich dachte erst, es könnte an den User-Rechten liegen und hab das Progamm mal als Admin ausgeführt. Aber es ändert nichts: Als Release gibt es "Nothing" zurück, als Debug meine ProductId.

    Kann sich jemand einen Reim darauf machen?

    MfG

    Pascal
    @pts Ich kann Deinen Effekt bestätigen.
    Probierma und gib als Defauktwert einen von Nothing verschiedenen Wert vor:

    VB.NET-Quellcode

    1. Dim ProductID = Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductId", "bla")
    Allerdings erklärt das nicht, warum Debug und Release hier unterschiedliches Verhalten zeigen.
    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!
    Also wenn ich als default "ABC" rein schreib kommt mit dem Release halt "ABC"... Ist aber noch immer nocht die definitiv existente Registry-Value.

    Aber schonmal schön, dass ich nicht der Einzige bin :thumbup:

    //EDIT: Bin einen Schritt weiter. Wenn ich bei Release "AnyCPU" oder "x86" vorgebe, bekomme ich "Nothing". Gebe ich meine "echte" Architektur, x64, an, so bekomme ich den Key ausgelesen.

    //EDIT 2:

    Debug: Ich bekomme Werte bei "AnyCPU" und "x64"
    Release: Ich bekomme Werte bei "x64"

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „pts“ ()

    @pts Also das hat bei mir keinen Einfluss auf das merkwürdige Ergebnis.
    Mit AnyCPU kommt jedes Mal "32" raus:

    VB.NET-Quellcode

    1. If Environment.Is64BitProcess Then
    2. MessageBox.Show("64")
    3. Else
    4. MessageBox.Show("32")
    5. End If
    ====
    @asusdk Das war es.
    Schalte ich das Projekt um auf x64, kommt bei Debug und Release das richtige Resultat.
    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!

    VB.NET-Quellcode

    1. ​Imports Microsoft.Win32
    2. Public Class Form1
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. MessageBox.Show(GetWindowsProductID.ToString)
    5. End Sub
    6. Function GetWindowsProductID() As Object
    7. If Environment.Is64BitOperatingSystem Then
    8. Using RegTyp64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)
    9. Dim Key64 = RegTyp64.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion", True)
    10. Return Key64.GetValue("ProductId")
    11. End Using
    12. Else
    13. Using RegTyp32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32)
    14. Dim Key32 = RegTyp32.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion", True)
    15. Return Key32.GetValue("ProductId")
    16. End Using
    17. End If
    18. End Function
    19. End Class
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If