Prüfen, ob RegistryKey vorhanden ist?
Moin.
Ich versuche jetzt seit Stunden, mein Programm zum laufen zu bringen aber es will einfach nicht. Es soll einfach nur überprüfen, ob ein Key in der Registry vorhanden ist. Aber ich habs echt in X verschiedenen Arten getestet, z.B. so:
Delphi-Quellcode:
oder so:
begin
result:= false; reg:= TRegistry.Create; try reg.RootKey:= HKEY_Local_Machine; if reg.KeyExists('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName') = True then begin Name:= ('HKEY_Local_Machine\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName'); result:= True; end; finally reg.Free; end; end;
Delphi-Quellcode:
und so:
begin
result:= false; reg:= TRegistry.Create; try reg.RootKey:= HKEY_Local_Machine; if reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName', False) = True then begin Name:= ('HKEY_Local_Machine\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName'); result:= True; end; finally reg.Free; end; end;
Delphi-Quellcode:
Wahrscheinlich wieder irgendwas ganz primitives, das ih übersehen habe oder?
begin
result:= false; reg:= TRegistry.Create; try reg.RootKey:= HKEY_Local_Machine; reg.CurrentPath:= '\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\'; if reg.KeyExists('KeyName') = True then begin Name:= ('HKEY_Local_Machine\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName'); result:= True; end; finally reg.Free; end; end; Danke für eure Hilfe |
Re: Prüfen, ob RegistryKey vorhanden ist?
Zitat:
|
Re: Prüfen, ob RegistryKey vorhanden ist?
Er gibt mir immer aus, dass der Key nicht vorhanden ist, obwohl er existiert.
Beziehungsweise result ist immer false. Sorry die Beschreibung oben war missverständlich. Hatte ich garnicht bemerkt. |
Re: Prüfen, ob RegistryKey vorhanden ist?
Ganz wichtig: Man prüft einen Boolean nicht mit = TRUE oder = FALSE. Das ist nicht nur unlogisch sondern kann auch Fehler (insbesondere in Verbindung mit API-Funktionen) verursachen.
Delphi-Quellcode:
Zu deinen Code: Du verwechselst den Schlüssel (Key, z. B. \SOFTWARE\Irgendwas\) mit dem Namen eines Wertes (KeyName).
if Reg.KeyExists then //richtig
//true if not Reg.KeyExists then //richtig //false if Reg.KeyExists = TRUE then //falsch if Reg.KeyExists = FALSE then //falsch
Delphi-Quellcode:
Result := False;
Reg := TRegistry.Create(KEY_READ); //Reg Nur-Lesen öffnen, dann brauchen wir auch keine Adminrechte try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', False) then begin Result := Reg.ValueExists('KeyName'); end; finally Reg.Free; end; |
Re: Prüfen, ob RegistryKey vorhanden ist?
Oh. Da war mein code doch mal wieder ein Griff ins Klo. :lol:
Falls ich den Key jetzt bearbeiten wollte, würde es aber reichen, einfach das (KEY_READ) wegzulassen, oder? Und nebenbei falls das Programm dann immer als Administrator gestrtet werden muss, kann man das gleich im Code mitgeben oder abfragen, damit dadurch keine Fehler entstehen? Danke |
Re: Prüfen, ob RegistryKey vorhanden ist?
Und unter Vista und höher schlägt wahrscheinlich auch noch die Virtualisierung zu, da du den Schlüssel mit allen Rechnen öffnest. Als normaler Benutzer hast du aber keine Schreibrechte unter HKLM. Öffne den Schlüssel also nur zum Lesen.
|
Re: Prüfen, ob RegistryKey vorhanden ist?
Zitat:
Zitat:
|
Re: Prüfen, ob RegistryKey vorhanden ist?
Aber vorsicht. Unter Vista und höher ist Administrator nicht gleich Administrator!
|
Re: Prüfen, ob RegistryKey vorhanden ist?
Zitat:
|
Re: Prüfen, ob RegistryKey vorhanden ist?
Ich brauch nochmal Rat.
ich hab hier jetzt das hier fabriziert:
Delphi-Quellcode:
Ich bekomme als Result zwar True, was richtig ist, allerdings wird x nicht deklariert, und die name-ausgabe liefert: 'Form1', und das obwohl die nirgendwo als 'Form1' definiert wird.
function RegCheck():Boolean;
begin result:= false; reg:= TRegistry.Create; try reg.RootKey:= HKEY_Local_Machine; if reg.KeyExists('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\') then begin if reg.ValueExists('KeyName') then begin Name:= ('HKEY_Local_Machine\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName'); result:= True; x:= 1; end; end; reg.RootKey:= HKEY_Current_User; if reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', False) then begin if reg.ValueExists('KeyName') then begin Name:= ('HKEY_Current_User\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName'); result:= True; x:= 2; end; end; finally reg.Free; end; end; Was nu? Danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz