Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Registry Lesen und Schreiben Win 7 64 Bit (https://www.delphipraxis.net/170758-registry-lesen-und-schreiben-win-7-64-bit.html)

MCOP2001DE 2. Okt 2012 06:44

Registry Lesen und Schreiben Win 7 64 Bit
 
Hallo

ich sitzt jetzt schon seid 2 Wochen daran ein Projekt auch 64bit Fähig zu machen.
Mein Problem ist das die Daten nicht aus der Registry gelesen werden.

mein Code ist
Code:
begin
 with TRegistry.Create do
   begin
     try
       RootKey := HKEY_LOCAL_MACHINE;
       if OpenKey('\SOFTWARE\Moeller Computer\MED Base\', false) then
       begin
        MyUser := ReadString('Users');                        // Zeilen werden übersprungen
        MyPassword := ReadString('Password');
        MyDatabasename := ReadString('Database');
        Myservername := ReadString('Server');
        MyWorkstationName := ReadString('Workstation');
        CloseKey;
       end;                                                   // wird wieder bearbeitet
    finally
     Free;
    end;
   end;
  with TRegistry.Create(KEY_ALL_ACCESS OR KEY_WOW64_64KEY) do
   begin
     try
       RootKey := HKEY_LOCAL_MACHINE;
       if OpenKey ('\Software\Moeller Computer\MED Base\', false) then
       begin
        MyUser := ReadString('Users');
        MyPassword := ReadString('Password');
        MyDatabasename := ReadString('Database');
        Myservername := ReadString('Server');
        MyWorkstationName := ReadString('Workstation');
        CloseKey;
       end;
    finally
       free;
     end;
   end;

    Verbindung_Herstellen;
end;
2. gibt es eine Möglichkeit das beim schreiben in die Registry die Admin-Rechte vom Programm zugewiesen werden?

Mcop2001de

mkinzler 2. Okt 2012 07:01

AW: Registry Lesen und Schreiben Win 7 64 Bit
 
Da du ja nur lesend zugreifen willst, würde ja ein Nur-Lesen Zugriff ausreichen: Regitry.OpenKeyReadOnly()

DeddyH 2. Okt 2012 07:01

AW: Registry Lesen und Schreiben Win 7 64 Bit
 
Oder gleich mit TRegistry.Create(KEY_READ) instanzieren.

MCOP2001DE 2. Okt 2012 07:48

AW: Registry Lesen und Schreiben Win 7 64 Bit
 
Danke für die schnelle Antwort

bei beiden Varianten werden die Zeilen die ich im Code mit dem Text makiert habe überspungen.
ich habe auch in der Registry den Pfad überprüft der Stimmt HKEY_LOCAL_MACHINE\Software\Wow6432Node\Moeller Computer\MED Base.
Wenn ich in einzelschritten des Programm ablaufen lasse werden die Zeilen 8-13 übersprungen.
was kann das sein?

DeddyH 2. Okt 2012 07:59

AW: Registry Lesen und Schreiben Win 7 64 Bit
 
Und bei KEY_READ OR KEY_WOW64_64KEY?

Bjoerk 2. Okt 2012 09:14

AW: Registry Lesen und Schreiben Win 7 64 Bit
 
Probier' mal so in Verbindung mit #3.

Delphi-Quellcode:
function IsWin7: boolean;
var
  osVerInfo: TOSVersionInfo;
  majorVersion, minorVersion: integer;
begin
  Result:= false;
  osVerInfo.dwOSVersionInfoSize:= SizeOf(TOSVersionInfo);
  if GetVersionEx(osVerInfo) then
  begin
    minorVersion:= osVerInfo.dwMinorVersion;
    majorVersion:= osVerInfo.dwMajorVersion;
    if osVerInfo.dwPlatFormId = VER_PLATForm_WIN32_NT then
      if (majorVersion = 6) and (minorVersion = 1) then
        Result:= true;
  end;
end;

function IsWow64: boolean;
type
  TIsWow64Process =
    function(Handle: Windows.THandle; var Res: Windows.BOOL): Windows.BOOL; stdcall;
var
  IsWow64Result: Windows.BOOL;
  IsWow64Process: TIsWow64Process;
begin
  Result:= False;
  if IsWin7 then
  begin
    IsWow64Process :=
      Windows.GetProcAddress(Windows.GetModuleHandle('kernel32'), 'IsWow64Process');
    if Assigned(IsWow64Process) then
      try
        IsWow64Process(Windows.GetCurrentProcess, IsWow64Result);
        Result:= IsWow64Result;
      except
        Result:= False;
      end;
  end;
end;

function GetRegPath: string;
var
  Substr: string;
begin
  if IsWow64 then
    Substr:= 'Wow6432Node\'
  else
    Substr:= '';
  Result:= 'SOFTWARE\' + Substr + 'Moeller Computer\MED Base\'
end;

MCOP2001DE 5. Okt 2012 06:29

AW: Registry Lesen und Schreiben Win 7 64 Bit
 
Danke Bjoerk

jetzt hats geklappt.
gibt es den auch eine Möglichkeit in die Registry zu schreiben ohne das der User Adminrechte besitzt?

Mcop2001de

DeddyH 5. Okt 2012 07:49

AW: Registry Lesen und Schreiben Win 7 64 Bit
 
Natürlich, aber eben nicht in jeden Zweig. HKLM ist ja benutzerübergreifend, da darf mit Recht nicht jeder einfach so schreiben. Normalerweise werden dort Standardwerte im Rahmen eines Setups hinterlegt, welches ja in der Regel mit Adminrechten ausgeführt wird. Benutzerbezogene Dinge können ja dann unter HKCU hinterlegt werden, dort sollte der aktuelle Benutzer Schreibrechte besitzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz