Registry Value in Schlüssel erstellen



  • Hallo,

    ich programmiere zum ersten Mal mit Zugriff auf die Registry von Windows.
    Dazu nutze ich ein Pointer auf ein TRegistry-Objekt.

    Ich kann ggf. Schlüssel ohne Probleme auch anlegen. Das Problem, welches ich habe ist, dass ich ggf. (sollte ein Value fehlen) ein Value nicht im Schlüssel neu anlegen kann. Wie geht das? Bei mir gibt es nur eine exception. Hier eine Quellcodeauszug.

    void CheckRegistryEntry(TRegistry *pReg)
    {
    	// Deklaration, Definition der Funktionsvariablen
     //	TRegistry *pReg = new TRegistry;	// Poniter der Instanz von TRegistry
    
    	try {
    		pReg->RootKey = HKEY_CURRENT_USER;	// Festlegen des Rootschlüssels
    
    		// Prüfuen ob Schlüssel in Registry vorhanden ist
    		if (pReg->KeyExists(REG_MAINKEY)) {
    			// Prüfung ob Werte im Schlüssel Vorhanden sind
    			pReg->OpenKeyReadOnly(REG_MAINKEY);
    			if (!pReg->ValueExists(REG_VALUELANG)) {
    				// Englisch wird als Standart eingetragen
    				pReg->WriteString(REG_VALUELANG, "eng");
    			}
    			if (!pReg->ValueExists(REG_VALUEDPATH)) {
    				// Zielpfad wird leer gelassen
    				pReg->WriteString(REG_VALUEDPATH, "");
    			}
    			if (!pReg->ValueExists(REG_VALUEBPATH)) {
    				// BackupPfad bleibt leer
    				pReg->WriteString(REG_VALUEBPATH, "");
    			}
    		}
    		else {
    			// Sollte nichteinmal ein Schlüssel SAACKE existieren,
    			// müssen alle Schlüssel angelegt werden.
    			// Erstellen des Schlüssels
    			pReg->CreateKey(REG_MAINKEY);
    			// Öffnen des Schlüssels
    			pReg->OpenKeyReadOnly(REG_MAINKEY);
    			// Anlegen von Schlüsselwerten mit Standarteinträge
    // Hier tritt Problem auf!!!!!!!!!!!!!
    			pReg->WriteString(REG_VALUELANG, "eng");
    			pReg->WriteString(REG_VALUEDPATH, "");
    			pReg->WriteString(REG_VALUEBPATH, "");
    
    		}
    	}
    	catch (...) {
    		// Sollte ein Fehler bei der Suche nach den Schlüsseln aufgetaucht sein,
    		// wird eine Fehlermeldung ausgegeben!
    		AnsiString asStr	= "Problem with open the Registry?";
    		Application->MessageBox(asStr.c_str(),"Warning!" , MB_OK|MB_ICONWARNING);
    	}
    

    Bitte um Hilfe und eine nützliche Lösung.
    Danke.



  • Habe das Problem schon gefunden.
    Anstatt OpenKeyReadOnly() zu verwenden muss man ReadOnly verwenden um einen Schlüssel zu öffnen. Ansonsten gibt es keinen Schreibzugriff.


Anmelden zum Antworten