Prüfen ob 32-Bit oder 64-Bit Betriebssystem - Fehlermeldung ???

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 59 Antworten in diesem Thema. Der letzte Beitrag () ist von Rebecca82.

    WhitePage schrieb:

    Probiere es doch an beiden Betriebssystemen aus...

    Dazu müsste ich in einer virtuellen Maschine schnell mal Windows 7 32-Bit installieren. Auf meinem Rechner und auf meinem Notebook habe ich jeweils nur Win 7 Ultimate 64-Bit laufen.
    Deswegen wäre ich über eine Antwort auf meine Frage dankbar. Wäre eben schneller. ;)
    Ich hatte das mal gehabt als Code, bis ich auf 4.0 umgestiegen bin und auf dem Rechner meiner Oma (32-bit) hat es gefunzt. Also ich hatte auf 64-bit getestet und bei 32-bit gab es ​False. Auf meinem System ​True.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Alles klar. Bei mir spuckt er 64-Bit aus. :)
    Okay - soweit so gut. Daher ein DICKES DANKESCHÖN an euch alle. :thumbsup:
    Nun wäre meine nächste und hoffentlich letzte Frage an euch, wie könnte ich folgendes so umsetzen, dass es unter .NET 3.5 läuft?

    VB.NET-Quellcode

    1. Private Function IrgendWas() As String
    2. Dim BasisSchlüssel As RegistryKey
    3. Dim UnterSchlüssel As RegistryKey
    4. 'Prüfen ob es sich um ein 64-Bit oder 32-Bit-System handelt
    5. If Environment.Is64BitOperatingSystem = True Then '<---Das hier wäre mal geklärt. ;-)
    6. BasisSchlüssel = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, _ '<---Aber wie setze ich das hier in 3.5 um???
    7. RegistryView.Registry64)
    8. UnterSchlüssel = BasisSchlüssel.OpenSubKey("SOFTWARE\Microsoft" & _
    9. "\Windows NT\CurrentVersion", False)
    10. Else 'Andernfalls (32-Bit)
    11. UnterSchlüssel = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft" & _
    12. "\Windows NT\CurrentVersion", False)
    13. End If

    Siehe Kommentare. ;) Also um etwas genauer zu sein: BasisSchlüssel = RegistryKey.OpenBaseKey(...)
    Danke für den Link. Aber ich finde dort keine Methode, mit der ich wie mit OpenBaseKey mir die Registrierung in 32-Bit-Ansicht oder 64-Bit-Ansicht zurückgeben lassen kann.
    Was würdet ihr vorschlagen? Wie würdet ihr es dann machen?

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

    Weil es hier auch so ist. Und ich es gerne so wie es hier gecoded ist für 3.5 umsetzen möchte.

    VB.NET-Quellcode

    1. Private Function IrgendWas() As String
    2. Dim BasisSchlüssel As RegistryKey
    3. Dim UnterSchlüssel As RegistryKey
    4. 'Prüfen ob es sich um ein 64-Bit oder 32-Bit-System handelt
    5. If Environment.Is64BitOperatingSystem = True Then
    6. BasisSchlüssel = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, _
    7. RegistryView.Registry64)
    8. UnterSchlüssel = BasisSchlüssel.OpenSubKey("SOFTWARE\Microsoft" & _
    9. "\Windows NT\CurrentVersion", False)
    10. Else 'Andernfalls (32-Bit)
    11. UnterSchlüssel = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft" & _
    12. "\Windows NT\CurrentVersion", False)
    13. End If

    Du hast ja Recht damit, dass wenn man auf AnyCPU kompiliert, automatisch das richtige genommen wird. Aber trotzdem würde es mich interessieren wie man das unter .NET 3.5 umsetzt, damit
    es sich genauso verhält wie im obigen Code-Abschnitt.
    Ihr habt mir bisher auch so toll dabei geholfen, Enviroment.Is64BitOperatingSystem zu ersetzen. :) Nun fehlt wirklich nur noch die OpenBaseKey()-Methode zu ersetzen. Auch wenn euch dieses Vorhaben wenig
    sinnvoll erscheint. Wie würdet ihr es machen?
    Ich habe nichts spezielles damit vor. Dadurch das es unter .NET 3.5 keine OpenBaseKey()-Methode gibt, wollte ich einfach nur wissen, wie man das alternativ programmieren kann. Einfach damit es sich genauso verhält wie im Code-Abschnitt meines letzten Posts.
    Da

    VB.NET-Quellcode

    1. RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, _ RegistryView.Registry64)
    unter 3.5 nicht geht, will ich lediglich wissen wie man das alternativ umsetzen kann.
    Also lasse ich das mit OpenBaseKey weg benutze einfach OpenSubKey und spare mir die Abfrage ob es sich um ein 32 oder 64-Bit System handelt, da wenn mit AnyCPU kompiliert wird sowieso das richtige genommen wird. Sprich 32 oder 64-Bit Registry. Richtig?
    Die Frage war, WAS willst du denn mit dem OpenBaseKey erreichen, WAS willst du damit machen?
    Registry Werte ändern?
    Registry Werte löschen?
    Registry Werte exportieren?

    Erklär uns genau was du vor hast und man kann dir helfen. :)

    Unter 2.0 würde mir spontan das hier einfallen (funktioniert auch):

    VB.NET-Quellcode

    1. Imports Microsoft.Win32
    2. Dim RegKey As RegistryKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "localhost")
    3. RegKey.OpenSubKey("SOFTWARE\Microsoft\Windows NT")

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „OMA“ ()

    OMA schrieb:

    Die Frage war, WAS willst du denn mit dem OpenBaseKey erreichen, WAS willst du damit machen?
    Registry Werte ändern?
    Registry Werte löschen?
    Registry Werte exportieren?

    Erklär uns genau was du vor hast und man kann dir helfen. :)

    Ich will Registry-Werte exportieren. Bist du dir sicher das OpenBaseKey unter 2.0 funktioniert? Bei mir geht das erst ab 4.0 mit VS 2010 Ultimate.
    Schaut euch bitte den Code an, welchen ich in meinem vorletzten Post eingefügt habe. Das ist Code der nur unter .NET 4 funktioniert.
    Weil Is64BitOperatingSystem und OpenBaseKey erst ab 4.0 in der MSDN definiert ist. Warum OpenBaseKey? Weil wenn ihr euch den Code genauer anschaut, dort folgendes passiert:
    Wenn das laufende System 64-Bit ist, ist BasisSchlüssel = Registry.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64) <-- Registrierungsansicht 64-Bit. Unterschlüssel ist dann BasisSchlüssel.OpenSubKey(...).
    Ansonsten ganz normale Zuweisung des Unterschlüssels mittels Registry.LocalMachine.OpenSubKey(...).
    Versteht ihr was ich meine?
    Bin mir ganz sicher, dass es funktioniert.
    Nutze einfach

    VB.NET-Quellcode

    1. Imports Microsoft.Win32
    2. Dim RegKey As RegistryKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "localhost")
    3. RegKey.OpenSubKey("SOFTWARE\Microsoft\Windows NT")

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

    Okay dann muss ich heute Abend wenn ich zu Hause bin mir den Code nochmal genau anschauen und ausprobieren. Bin jetzt leider unterwegs. Ich kann mich jetzt nur daran erinnern, dass er mir unter 3.5 folgende Fehlermeldung anzeigt: OpenBaseKey ist kein Member von Registry o.ä.