none
SetRegistryKey funktioniert nicht in Dialog basierter Win32 Anwendung RRS feed

  • Frage

  • Guten Tag,

    es ist mir bisher leider nicht gelungen einen Registry Key unter HKCL\Software mit SetRegistryKey() zu setzen, wie das in der Initialisierungsroutine meiner Anwendung ja sogar beschrieben ist (siehe unten).

    Ich entwickele eine Dialog basierte Win32 MFC-Anwendung auf Visuel C++ 2010 Prof. unter Windows 7 Prof. SP1 64 Bit. Vorsichtshalber habe ich auch bereits unter HKCU\Software\Wow6432Node nachgeschaut, aber auch hier ist nichts zu finden.

    Ich habe mir bei der bisherigen Suche fast die Ohren gebrochen, finde aber keinen konkreten Hinweis auf irgendwelche Fehler meinerseits. Muß man irgendwelche speziellen Einstellungen am Entwicklungssystem Vornehmen um die Registry manipulieren zu können? Ich benötige die Registry in diesem Fall und müßte sonst auf die gute alte INI-Datei zurückgreifen.

    Wer kennt die Lösung für mein - wahrscheinlich triviales - Problem?

    // Ändern Sie den Registrierungsschlüssel, unter dem Ihre Einstellungen gespeichert sind.
    // TODO: Ändern Sie diese Zeichenfolge entsprechend,
    // z.B. zum Namen Ihrer Firma oder Organisation.
    SetRegistryKey(_T("Rds"));

    M. Thaddaeus

    Dienstag, 13. Januar 2015 14:53

Antworten

  • Hallo M.,

    woher willst du wissen, dass der Wert nicht gespeichert wird?

    1) Versuche doch mal, ob die Einstellung durch die Lesenmethoden gelesen werden kann?

    2) Du kannst auch die gesamte Registry druchsuchen (zu oberen Ebene im "Baum" gehen, STRG+F).

     


    © 2015 Thomas Roskop

    Mittwoch, 14. Januar 2015 06:05
  • Nun erinnerte ich mich, daß der Schlüssel ja erst dann im RegEdit sichtbar wird, wenn der Rechner neu gestartet wurde.

    Nö ganz sicher nicht. Wenn der RegEdit offen ist mit F5 aktualisieren. Wenn Du per Software Schlüssel in der Registry änderst, dann mußt du den PC nicht booten damit Du die siehst! Die Schlüssel aktualisieren sich nur nicht automatisch.

    Wenn Du Registry Keys in andere Zweige schreiben möchtest gibt es Reg* API Funktionen (z.B. RegCreateKeyEx, RegGetValue, RegSetValueEx). Wichtig ist nur dass Du dann die Zugriffsbeschränkungen der Registry Äste beachtest. HKLM z.B. ist nur elevated schreib fähig.


    Best regards

    Bordon

    Note: Posted code pieces may not have a good programming style and may not perfect. It is also possible that they do not work in all situations. Code pieces are only indended to explain something particualar.

    • Als Antwort markiert m-thaddaeus Mittwoch, 14. Januar 2015 12:22
    Mittwoch, 14. Januar 2015 11:50

Alle Antworten

  • Hallo M.,

    dass Du den Wert nicht findest, dürfte daran liegen dass er unter HKEY_CURRENT_USER (HKCU) erstellt wird, siehe CWinApp::SetRegistryKey - was auch besser ist, denn in HKLM darf ein Standard-Benutzer nicht schreiben, spätestens seit Windows Vista.

    Werte, die in HKLM gespeichert werden sollen, sollte man während des Setups mit Administrator Rechten eintragen.

    Gruß Elmar

    Dienstag, 13. Januar 2015 16:30
  • Guten Morgen Elmar,

    wie ich bereits schrieb, habe ich unter HKCU\Software (HKEY_CURRENT_USER\Software) nachgeschaut! Da tut sich aber nichts! Ebenso ist nichts unter HKCU\Software\Wow6432Node etwas zu finden. Es kann also nicht daran gelegen haben, daß ich im falsch nachgeschaut habe, es muß einen anderen Grund geben! Fragt sich nur welchen?


    M. Thaddaeus

    Mittwoch, 14. Januar 2015 05:55
  • Hallo M.,

    woher willst du wissen, dass der Wert nicht gespeichert wird?

    1) Versuche doch mal, ob die Einstellung durch die Lesenmethoden gelesen werden kann?

    2) Du kannst auch die gesamte Registry druchsuchen (zu oberen Ebene im "Baum" gehen, STRG+F).

     


    © 2015 Thomas Roskop

    Mittwoch, 14. Januar 2015 06:05
  • Hallo,

    hast Du denn auch Werte geschrieben? Die Methode legt "nur" den Namen für den Zweig fest, den anschließende WriteProfile-Methoden verwenden. Andere Wege wie CRegKey Class benutzen den Wert nicht - und das Ganze dürfte eher eine INI-Migrationshilfe (aus Windows 9x Tagen) sein.

    Ansonsten: Überwache mit dem Process Monitor, wo die Werte entschwinden...

    Gru8 Elmar

    Mittwoch, 14. Januar 2015 07:19
  • Hallo Elmar,

    herzlichen Dank für Deinen Hinweis! Nachdem ich meinen Blechotto neu gestartet hatte habe ich die Registry komplett durchsucht und --- oh Wunder --- den Schlüssel entdeckt. Der war da wo er hingehört, nämlich in HKCU\Software! Nun erinnerte ich mich, daß der Schlüssel ja erst dann im RegEdit sichtbar wird, wenn der Rechner neu gestartet wurde. Ich hatte ja geahnt, daß die Lösung meines Problems trivial sein müsse und behielt leider recht.

    Nochmals Dank für Deine Mühe.


    M. Thaddaeus

    Mittwoch, 14. Januar 2015 08:43
  • Hallo M. Thaddaeus,

    Du kannst Beiträge, die Dir weitergeholfen haben, als Antworten markieren, damit auch künftige Leser dieses Threads leichter auf die Lösung kommen.

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.


    Mittwoch, 14. Januar 2015 09:21
    Administrator
  • Nun erinnerte ich mich, daß der Schlüssel ja erst dann im RegEdit sichtbar wird, wenn der Rechner neu gestartet wurde.

    Nö ganz sicher nicht. Wenn der RegEdit offen ist mit F5 aktualisieren. Wenn Du per Software Schlüssel in der Registry änderst, dann mußt du den PC nicht booten damit Du die siehst! Die Schlüssel aktualisieren sich nur nicht automatisch.

    Wenn Du Registry Keys in andere Zweige schreiben möchtest gibt es Reg* API Funktionen (z.B. RegCreateKeyEx, RegGetValue, RegSetValueEx). Wichtig ist nur dass Du dann die Zugriffsbeschränkungen der Registry Äste beachtest. HKLM z.B. ist nur elevated schreib fähig.


    Best regards

    Bordon

    Note: Posted code pieces may not have a good programming style and may not perfect. It is also possible that they do not work in all situations. Code pieces are only indended to explain something particualar.

    • Als Antwort markiert m-thaddaeus Mittwoch, 14. Januar 2015 12:22
    Mittwoch, 14. Januar 2015 11:50