RegQueryValueEx liefert einen falschen Wert



  • Hallo,

    ich weiß nicht ob mir hier einer helfen kann, aber ich habe die Hoffnung, dass vielleicht schon mal einer von Euch ebenfalls dieses Problem hatte.

    Eine Software von mir enthält folgende Passage, die den Installationspfad von Access97 ausliest:

    readfile = fopen("C:\\Programme\\Access Control\\Access_Text.txt","a");
    
          if ( (RegOpenKey(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Office\\8.0\\Access\\Wizards", &hKey)) == 0)
          {
             RegQueryValueEx(hKey, "AddInPath", NULL, NULL, regvalue, &size);
             fprintf(readfile, "\n Access97 wurde unter folgendem Pfad in die Registry eingetragen:\n");
             fprintf(readfile, regvalue);
             RegCloseKey(hKey);
          }
    

    Der dazugehörige Registry-Eintrag, sieht wie folgt aus:
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\8.0\Access\Wizards]
    "AddInPath"="C:\\Programme\\Microsoft Office97\\Office\"

    Und jetzt kommt der Brüller, das ist der Inhalt der Textdatei, die mit den beiden "fprintf"-Anweisungen gefüllt wird:

    Access97 wurde unter folgendem Pfad in die Registry eingetragen:
    C:\Programme\Microsoft Office\Office\

    Der Fehler liegt nicht in meiner Programmierung.
    Ich habe diesen Registry-Eintrag exportiert und auf einen anderen PC importiert. Dieser andere PC liefert mir mit genau dem gleichen Programm den richtigen Pfad zurück.

    Fazit: Anscheinend ist es möglich, Windows an irgendeiner Stelle derart zu manipulieren, dass ich mit "RegQueryValueEx" nicht den Pfad bekomme, der in der Registry steht, sondern was ganz anderes.

    Weiß darüber irgendeiner was???

    Danke für jede mögliche Idee.



  • Wenn du unbedingt die API-Funktion anstelle von TRegistry verwenden willst, warum stellst du die Frage dann nicht im WinAPI-Forum!?



  • Sorry, hab ich nicht drauf geachtet, wärst Du so nett und würdest es verschieben?
    Selber kann ich das nicht, wenn ich das richtig sehe.

    Danke.



  • Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • So, dass Problem ist behoben, ich war so naiv und bin davon ausgegangen, dass es im Ergebnis keinen Unterschied gibt zwischen RegQueryValueEx und TRegistry. Dabei habe ich wohl vergessen, dass die WinAPI von Microsoft kommt ... 😡

    Für alle, die vielleicht einmal ähnliche Probleme haben:

    Ganz genau dasselbe über die TRegistry programmiert klappt wunderbar und es wird das als Wert zurückgegeben, was auch tatsächlich in der Registry liegt.
    Habe also gerade alle meine RegQueryValueEx entfernt und durch TRegistry ersetzt.

    Wäre allerdings trotzdem mal interessant, was die RegQueryValueEx zurückliefert (zumal der Beitrag ja auch jetzt in der richtigen Kategorie liegt), denn es scheint nicht immer der Wert zu sein, der wirklich in der Registry steht, bzw. scheint sich irgendwo in den Tiefen von Windows etwas einstellen zu lassen, dass andere Werte zurückgeliefert werden.



  • VCL wird auch nix anderes machen, als die WinAPI Funktionen aufzurufen.


Anmelden zum Antworten