AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Prüfen, ob RegistryKey vorhanden ist?
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfen, ob RegistryKey vorhanden ist?

Ein Thema von Jamah · begonnen am 1. Mai 2010 · letzter Beitrag vom 3. Mai 2010
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Jamah

Registriert seit: 2. Dez 2009
Ort: Nordhorn
74 Beiträge
 
RAD-Studio 2010 Arc
 
#1

Prüfen, ob RegistryKey vorhanden ist?

  Alt 1. Mai 2010, 09:41
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:
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;
oder so:
Delphi-Quellcode:
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;
und so:
Delphi-Quellcode:
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;
Wahrscheinlich wieder irgendwas ganz primitives, das ih übersehen habe oder?

Danke für eure Hilfe
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Prüfen, ob RegistryKey vorhanden ist?

  Alt 1. Mai 2010, 10:01
Zitat:
Es will nicht.
Aha. Und was kann ich mir, als jemand, der nicht vor deinem Computer sitzt, darunter vorstellen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Jamah

Registriert seit: 2. Dez 2009
Ort: Nordhorn
74 Beiträge
 
RAD-Studio 2010 Arc
 
#3

Re: Prüfen, ob RegistryKey vorhanden ist?

  Alt 1. Mai 2010, 10:04
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.
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#4

Re: Prüfen, ob RegistryKey vorhanden ist?

  Alt 1. Mai 2010, 10:07
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:
  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
Zu deinen Code: Du verwechselst den Schlüssel (Key, z. B. \SOFTWARE\Irgendwas\) mit dem Namen eines Wertes (KeyName).

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;
  Mit Zitat antworten Zitat
Jamah

Registriert seit: 2. Dez 2009
Ort: Nordhorn
74 Beiträge
 
RAD-Studio 2010 Arc
 
#5

Re: Prüfen, ob RegistryKey vorhanden ist?

  Alt 1. Mai 2010, 10:11
Oh. Da war mein code doch mal wieder ein Griff ins Klo.

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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Prüfen, ob RegistryKey vorhanden ist?

  Alt 1. Mai 2010, 10:12
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#7

Re: Prüfen, ob RegistryKey vorhanden ist?

  Alt 1. Mai 2010, 10:15
Zitat von Jamah:
Falls ich den Key jetzt bearbeiten wollte, würde es aber reichen, einfach das (KEY_READ) wegzulassen, oder?
Normalerweise schon, du kannst dir ja mal in der Delphi-Hilfe anschauen welche Konstanten da man noch so alles übergeben kann
Zitat von Jamah:
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?
Such mal im Forum bzw. in MSDN nach IsUserAdmin oder UserIsAdmin oder ähnlich. Damit kannst abfragen ob der aktuelle Nutzer Admin-Rechte hat.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Prüfen, ob RegistryKey vorhanden ist?

  Alt 1. Mai 2010, 10:19
Aber vorsicht. Unter Vista und höher ist Administrator nicht gleich Administrator!
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#9

Re: Prüfen, ob RegistryKey vorhanden ist?

  Alt 1. Mai 2010, 10:26
Zitat von Luckie:
Aber vorsicht. Unter Vista und höher ist Administrator nicht gleich Administrator!
Ja, wegen UAC richtig? Soweit ich weiß gibt die API-Funktion IsUserAnAdmin (http://msdn.microsoft.com/en-us/library/bb776463.aspx) false zurück wenn der User zwar Admin ist aber trotzdem nur Benutzer-Rechte hat.
  Mit Zitat antworten Zitat
Jamah

Registriert seit: 2. Dez 2009
Ort: Nordhorn
74 Beiträge
 
RAD-Studio 2010 Arc
 
#10

Re: Prüfen, ob RegistryKey vorhanden ist?

  Alt 1. Mai 2010, 11:00
Ich brauch nochmal Rat.
ich hab hier jetzt das hier fabriziert:

Delphi-Quellcode:
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;
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.

Was nu?
Danke
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:59 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