2017-12-05 5 views
1

Ich versuche, einen neuen Schlüssel zu schreiben, in diesem Modus und einen Wert zuweisen, mein System ist 32 Bit und Code ist wie folgt. Ich bekomme einen Fehler mit dem folgenden Code als Fehler beim Einstellen der Daten für den Modus Ich habe versucht, mit allen Korrekturen durch Einstellung verschiedener Parameter auf reg.Access, aber keinen Erfolg. Ich muss immer reg.Access auf KEY_READ behalten wie bei KEY_WRITE wird der Unterschlüssel bei der Methode reg.OpenKey nicht geöffnet.Fehler beim Festlegen von Daten zu Unterschlüssel in der Registrierung

reg := TRegistry.Create(KEY_READ); 
    reg.RootKey := HKEY_LOCAL_MACHINE; 

    if (not reg.KeyExists('\Software\MyApp\appname\')) then 
    begin 
     MessageDlg('Key not found! Created now.', mtInformation, mbOKCancel, 0); 
    end; 

    reg.Access:= KEY_READ; 
    openResult := reg.OpenKey('\Software\MyApp\appname\',True); 
     if not openResult = True then 
     begin 
      MessageDlg('Unable to create key! Exiting.', mtError, mbOKCancel, 0); 
      Exit(); 
     end; 


     if not reg.KeyExists('Mode') then 
     begin 
     reg.WriteString('Mode','trial'); 
     end; 

Antwort

4

KEY_READ gibt Ihnen Lesezugriff. Aber das ist nicht genug für dich. Sie übergeben True an das CanCreate Argument von OpenKey und benötigen so das KEY_CREATE_SUB_KEY Zugriffsflag. Und dann versuchen Sie, einen Wert zu schreiben, der das Zugriffsflag KEY_WRITE erfordert.

Ihr Problem ist vermutlich, dass Ihr Prozess als Benutzer ohne ausreichende Rechte ausgeführt wird. Sie müssen sicherstellen, dass Ihr Programm mit ausreichenden Rechten ausgeführt wird. Normalerweise bedeutet dies, dass es als Administrator ausgeführt wird. Verwenden Sie das Anwendungsmanifest, um dies zu erzwingen, oder das runas Verb, je nachdem, welche Methode für Ihre Anwendung am besten geeignet ist.

Verwandte Themen