Thema: Delphi REG-Datei importieren

Einzelnen Beitrag anzeigen

Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#1

REG-Datei importieren

  Alt 12. Feb 2007, 14:52
Hallo,

ich hab folgendes Problem:

Ich möchte eine REG-Datei in die Registry in einem von mir festgelegten Pfad importieren.
Dazu lege ich mit RegCreateKey einen Unterschlüssel an (funktioniert), unter dem die Daten
aus der Reg-Datei importiert werden sollen.

Zum Importieren selbst verwende ich Luckie's routine "RegLoadKeyFromFile" (leicht abgewandelt, so
das er auf NT-Systemen auch RegLoadkey verwendet, statt regrestorekey).

Delphi-Quellcode:
function RegLoadKeyFromFile(Key: HKEY; const SubKey, Filename: string): DWORD;
const
  SE_BACKUP_NAME = 'SeBackupPrivilege';
  SE_RESTORE_NAME = 'SeRestorePrivilege';
var
  PrevBackup: Boolean;
  PrevRestore: Boolean;
  KeyHandle: HKEY;
  ShortName: array[0..MAX_PATH] of Char;
begin
  Result := SetPrivilege(SE_BACKUP_NAME, True, PrevBackup);
  if (Result = ERROR_SUCCESS) then
    try
      Result := SetPrivilege(SE_RESTORE_NAME, True, PrevRestore);
      if (Result = ERROR_SUCCESS) then
        try
          if (GetVersion() > $80000000) then
          begin // Win9x (FIXME: Test it! - and see RegReplaceKey)
            if (GetShortPathName(PChar(Filename), ShortName, MAX_PATH) = 0) then
              Result := GetLastError()
            else
              Result := RegLoadKey(Key, PChar(SubKey), ShortName);
          end
          else
          begin // WinNT (FIXME: Load RegRestoreKey dynamically!)
            KeyHandle := 0;
            Result := RegOpenKeyEx(Key, PChar(SubKey), 0, MAXIMUM_ALLOWED, KeyHandle);
            if (Result = ERROR_SUCCESS) then
              try
                Result := RegLoadKey(KeyHandle, pchar(SubKey),PChar(Filename));
              finally
                RegCloseKey(KeyHandle);
              end;
          end;
        finally
          if (not PrevRestore) then
            SetPrivilege(SE_RESTORE_NAME, PrevRestore, PrevRestore);
        end;
    finally
      if (not PrevBackup) then
        SetPrivilege(SE_BACKUP_NAME, PrevBackup, PrevBackup);
    end;
end;
Allerdings bekomme ich die Fehlermeldung zurück, das das Format der Reg-Datei nicht stimmen
würde. Und das mit einer Reg-Datei die ich vorher mit Regedit exportiert hab ??????

Daraufhin hab ich einige Tests gemacht.

Zuerst hab ich in der Reg-Datei die Schlüssel so angepasst, das sie auf den neuen Schlüssel
passen (HKEY_xxxx durch meinen Pfad ersetzt). -> Gleicher Fehler

Dann einfach nur HKEY_xxxx aus den Key's entfernt. -> Gleicher Fehler.

Woran kann das liegen ????
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat