Ich habe den Wert des Schlüssels MachineGuid
von HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography
verwendet, um Hosts eindeutig zu identifizieren, aber bei 32-Bit-Prozessen, die auf 64-Bit-Computern ausgeführt werden, scheint der Wert zu fehlen. Ich denke, es wird unter Wow6432Node gesucht, wo es tatsächlich fehlt. Laut sollten Sie dies tun in der Lage sein, durch Hinzufügen eines Flags zum richtigen Schlüssel zu gelangen, aber unterhalb des Codes scheint der Job immer noch nicht zu funktionieren. Was vermisse ich?
Ihr Code ist unnötig komplex, vor allem deshalb, weil Sie nicht die Vorteile der integrierten TRegistry
-Klasse nutzen, die Sie vor allen Komplexitäten der Low-Level-Registry-API schützt. Betrachten Sie beispielsweise den folgenden Code:
Die Funktion ReadRegStr
gibt den Zeichenfolgenwert Name
vom Schlüssel Key
relativ zum Stammschlüssel Root
zurück. Wenn ein Fehler auftritt, z. B. wenn der Schlüssel oder Name nicht vorhanden ist oder wenn der Wert vom falschen Typ ist, wird eine Ausnahme ausgelöst.
Der Parameter View
ist eine Aufzählung, mit der Sie problemlos auf systemeigene 32-Bit- oder 64-Bit-Ansichten der Registrierung zugreifen können. Beachten Sie, dass native für den laufenden Prozess nativ bedeutet. So wird es die 32-Bit-Ansicht für einen 32-Bit-Prozess und die 64-Bit-Ansicht für einen 64-Bit-Prozess sein. Diese Aufzählung spiegelt die entsprechende Definition in .net wider.
Ich würde vorschlagen, dass Sie die Funktion IsWow64Process()
verwenden, um zu wissen, wann Sie ein 32-Prozess auf einem 64-Bit-Betriebssystem ausführen, und dann nur die KEY_WOW64_64KEY
-Flags in dieser bestimmten Bedingung anwenden. Wenn die App ein 32-Bit-Prozess in einem 32-Bit-Betriebssystem oder ein 64-Bit-Prozess in einem 64-Bit-Betriebssystem ist, werden die Flags nicht benötigt.
Zum Beispiel:
%Vor%In meiner Verwendung dieses Registrierungsschlüssels ging ich einen Schritt weiter. Wenn der Wert nicht existiert, habe ich ihn erstellt: nicht in HKEY_LOCAL_MACHINE, das würde eine Erhöhung erfordern, aber in HKEY_CURRENT_USER. Wer den dort eingeführten Schlüssel sieht, wird kaum erkennen, dass es sich um einen Dummy handelt.
%Vor%Das ist ein guter Punkt von @Remy Lebeau - TeamB obwohl; Ich sollte den obigen Code entsprechend modifizieren.
Tags und Links 64bit windows delphi registry 32bit-64bit