vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Benötige Hilfe bei Code-Abschnitt 
Autor: Dexter7811
Datum: 27.07.14 12:36

Hallo zusammen,

ich bin neu hier im Forum und benötige Hilfe bei einer Sache.
Ich habe schon etwas Erfahrung in Visual Basic gesammelt, allerdings ist es noch
ein weiter Weg bis ich es mal richtig gut kann.

Nun zum Wesentlichen: Ich möchte gerne ein Äquivalent für das .NET 3.5 des folgenden Codes schreiben:
'Dieser Code-Abschnitt funktioniert nur ab .NET 4!
Imports Microsoft.Win32                 'für die RegistryKey-Klasse
Imports Microsoft.VisualBasic.Devices   'für SysInfo
 
Private Function IRGENDWAS
    Dim BasisSchlüssel As RegistryKey
    Dim UnterSchlüssel As RegistryKey
 
    'Prüfen ob es sich um ein 64-Bit oder 32-Bit Betriebsystem handelt
    'Im Grunde genommen will ich nur wissen, wie ich diese If-Anweisung ändern 
    ' muss:
    '--------------------------------------------------------------------------
    If Enviroment.Is64BitOperatingSystem = True Then
        BasisSchlüssel = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, _
                                                 RegistryView.Registry64)
    '--------------------------------------------------------------------------
    'Der Rest würde auch unter .NET 3.5 passen
        UnterSchlüssel = BasisSchlüssel.OpenSubKey("SOFTWARE\Microsoft" & _
                                                       "\Windows" & _
                                                       "NT\CurrentVersion", _
                                                       False)
 
    Else 'Andernfalls (32-Bit)
            UnterSchlüssel = Registry.LocalMachine.OpenSubKey( _
              "SOFTWARE\Microsoft" & _
                                                              "\Windows" & _
                                                              "NT\CurrentVersi" & _
                                                              "n", False)
    End If
 
    .
    .
    .
End Function
Würde mich sehr über Hilfe bzw. Ratschläge eurerseits sehr freuen.

Grüße
Dexter7811
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Benötige Hilfe bei Code-Abschnitt 
Autor: Rippler
Datum: 27.07.14 15:01

if IntPtr.Size = 8 then
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Benötige Hilfe bei Code-Abschnitt 
Autor: Dexter7811
Datum: 27.07.14 16:05

Hallo Rippler,

erst einmal Dankeschön für deine Antwort.

Wenn IntPtr.Size = 8 <- 64-Bit, wenn = 4 <- 32-Bit. Ist das soweit richtig?
Aber was mache ich mit folgendem Code:
BasisSchlüssel = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, _
                                                 RegistryView.Registry64)
Hier meckert der Compiler nämlich über folgendes:
"OpenBaseKey" ist kein Member von "Microsoft.Win32.RegistryKey".

Wie würdest du das codetechnisch lösen? Könntest du mir bitte ein Codebeispiel posten?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Benötige Hilfe bei Code-Abschnitt 
Autor: ModeratorDaveS (Moderator)
Datum: 27.07.14 17:35

OpenBaseKey() und RegistryView gibt es nur ab FW 4.0. Sonst ist man auf WinAPI hingewiesen.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Benötige Hilfe bei Code-Abschnitt 
Autor: Dexter7811
Datum: 27.07.14 18:06

Okay. Deswegen funktioniert das auch nur ab .NET 4. Ich verstehe. Könntet ihr mir anhand eines Beispiels zeigen, wie man das mit Hilfe der WinAPI macht? Unter der Berücksichtigung das es nicht nur darum geht zu prüfen, welches OS läuft, also 32-Bit oder 64-Bit, sondern auch darum wie man dann dementsprechend den Basisschlüssel richtig rausliest. Oder kennt jemand vielleicht einen Link, wo das anhand eines Beispiels in Visual Basic gezeigt wird?

Beitrag wurde zuletzt am 27.07.14 um 18:16:45 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Benötige Hilfe bei Code-Abschnitt 
Autor: ModeratorDaveS (Moderator)
Datum: 27.07.14 18:38

Du brauchst diese Möglichkeit nur wenn du ein Programm schreibst, das im 32Bit oder 64Bit Modus Registry-Einträge aus dem anderen Modus abfragen will. Ist das wirklich der Fall? Es wird sonst automatisch aus dem richtigen Modus gelesen.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Benötige Hilfe bei Code-Abschnitt 
Autor: Dexter7811
Datum: 27.07.14 18:57

Ja ich wollte es schon so haben, dass das Programm erkennt ob es sich um ein 32-Bit oder 64-Bit OS handelt und dementsprechend aus der Registry liest. So wie der Code-Abschnitt in meinem ersten Posting.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Benötige Hilfe bei Code-Abschnitt 
Autor: ModeratorDaveS (Moderator)
Datum: 27.07.14 19:10

Angenommen dein Programm wurde für AnyCPU umgewandelt, das Programm liest sowieso dementsprechend aus der Registry. Die Prüfung braucht man gar nicht. Auch wenn das Programm für 32Bit oder 64Bit umgewandelt wurde wird die richtige Registry verwendet. Andersrum wenn du etwa RegistryView.Registry64 verwendest wird unbedingt aus der 64Bit Registry gelesen (es sei denn es ist ein 32Bit OS, wo es nur eine 32Bit Registry gibt), eine Prüfung ob das Programm unter 64Bit läuft wäre auch hinfällig.

Siehe auch z.B. hier (erste Antwort)
http://social.msdn.microsoft.com/Forums/en-US/92f962d6-7f5e-4e62-ac0a-b8b0c9f552a3/issue-reading-x64-registry-keys?forum=netfx64bit

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Benötige Hilfe bei Code-Abschnitt 
Autor: Dexter7811
Datum: 27.07.14 19:41

Ich habe bisher mal folgendes gebastelt:
Imports System.Runtime.InteropServices
 
    <DllImport("kernel32.dll", SetLastError:=True, _
      CallingConvention:=CallingConvention.Winapi)> _
    Public Function IsWow64Process( _
        ByVal hProcess As Long, _
        ByRef Wow64Process As Boolean) As Long
    End Function
    Private Function Is64BitOperatingSystem() As Boolean
        If IntPtr.Size = 8 Or IntPtr.Size = 4 And _
          Is32BitProcessOn64BitProcessor() Then
            Return True
        Else
            Return False
        End If
    End Function
    Private Function Is32BitProcessOn64BitProcessor() As Boolean
        Dim RetVal As Boolean
        IsWow64Process(Process.GetCurrentProcess().Handle, RetVal)
        Return RetVal
    End Function
Wäre das in der Form so einigermaßen richtig?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Benötige Hilfe bei Code-Abschnitt 
Autor: Dexter7811
Datum: 27.07.14 19:48

DaveS schrieb:
Zitat:

Andersrum wenn du etwa RegistryView.Registry64
verwendest wird unbedingt aus der 64Bit Registry gelesen (es
sei denn es ist ein 32Bit OS, wo es nur eine 32Bit Registry
gibt)

Genauso will ich es. Wenn das Programm in einem 64-Bit OS gestartet wird, soll es unbedingt aus der 64-Bit Registry lesen. Andernfalls ganz normal.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Benötige Hilfe bei Code-Abschnitt 
Autor: ModeratorDaveS (Moderator)
Datum: 28.07.14 09:53

Und das wird er ja auch tun wenn du für AnyCPU umwandelst und ganz normalen Registry-Zugriff machst. (Ohne RegistryView).

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel