Registry Wert löschenklappt nicht



  • Hallo, hab mich mal hier angemeldet in der Hoffnung das mir hier jemand auf die Sprünge helfen kann. Ich versuche einen Wert in der Registry zu löschen.. dazu habe ich zum Testen mit Regedit einen Schlüssel HKEY_LOCAL_MACHINE/SOFTWARE/TEST mit dem binären Inhalt X erzeugt.

    nun habe ich folgenden Code, nur leider funktioniert das nicht.

    #include <stdio.h>
    #include <windows.h>
    
    int main()
    {
    	HKEY hkey;
    	LONG result;
    	//result = RegDeleteKeyValue(HKEY_LOCAL_MACHINE,L"\\SOFTWARE\\TEST",L"X");
    	result = RegOpenKeyEx(HKEY_LOCAL_MACHINE,L"\\SOFTWARE\\TEST",NULL,KEY_ALL_ACCESS, &hkey);
    	if (result != ERROR_SUCCESS) 
    	{
    		if (result == ERROR_FILE_NOT_FOUND) {
    			printf("Key not found.\n");
    			system("Pause");
    			return TRUE;
    		} 
    		else {
    			printf("Error opening key.\n");
    			system("Pause");
    			return FALSE;
    		}
    	}
    	else
    	{
    		printf("key opened");
    		RegDeleteValue(hkey, L"X");
    		RegCloseKey(hkey);
    	}
    
    	system("Pause");
    	return 0;
    }
    

    ich bekomme immer die Meldung "Error opening key"..
    auch die Version mit RegDeleteKeyValue funktioniert nicht.

    Vll hat ja jemand sofort den Durchblick warum es einfach nicht klappt?? Ich versuch das jetzt schon seit Stunden mit Google und Trial&Error und komm einfach nicht dahinter. Den Schlüssel "TEST" komplett zu löschen hab ich schon geschafft (mit nem code den ich bei msdn gefunden hatte), ich möchte aber halt nur einen einzelnen binären Eintrag entfernen.

    besten Dank schonmal,
    Ello

    edit: ok, ich hab meinen code nun etwas aktualisiert und den fehler code deutlicher zu bekommen:

    #include <stdio.h>
    #include <windows.h>
    int main()
    {
    	LONG result;
    	result = RegDeleteKeyValue(HKEY_LOCAL_MACHINE,L"/SOFTWARE/TEST",L"X");
    	LPVOID lpMsgBuf;
    	FormatMessage( 
    		FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    		FORMAT_MESSAGE_FROM_SYSTEM | 
    		FORMAT_MESSAGE_IGNORE_INSERTS,
    		NULL,
    		result,
    		0, 
    		(LPTSTR) &lpMsgBuf,
    		0,
    		NULL 
    		);
    	MessageBox( NULL, (LPCTSTR)lpMsgBuf, L"Error", MB_OK | MB_ICONINFORMATION );
    	LocalFree( lpMsgBuf );
    
    	return 0;
    }
    

    Nun bekomme ich "Das System konnte die angegebene Datei nicht finden", was doch wohl bedeutet das der Schlüssel nicht vorhanden ist?? Ist er aber, hab ihn ja selbst angelegt..

    kann mir das jemand erklären?



  • Du mußt den Key SOFTWARE erst öffnen, bei mir (unter XP gibts kein RegDeleteKeyValue) funktioniert folgendes:

    LONG result;
        HKEY subKey;
    
        result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_ALL_ACCESS, &subKey);
    
        if(result != ERROR_SUCCESS)
        {
        	printf("ne\n");
        	return 1;
        }
    
        result = RegDeleteKey(subKey,"TEST");
    


  • danke für Deine Antwort..
    jetzt kann ich zumindest den schlüssel "SOFTWARE" öffnen, aber ich möchte ja nicht den schlüssel "TEST" löschen sondern einen binären Eintrag innerhalb des Schlüssels..
    also muß ich doch auch TEST öffnen. aber wie geht das? einfach "SOFTWARE/TEST" geht nicht. der wird nicht gefunden, obwohl ich ihn doch angelegt habe

    übrigens kann ich auch den Schlüssel "TEST" nicht löschen. Fehlermeldung "Das System kann die angegebene Datei nicht finden".. sehr merkwürdig



  • ello schrieb:

    also muß ich doch auch TEST öffnen. aber wie geht das? einfach "SOFTWARE/TEST" geht nicht. der wird nicht gefunden, obwohl ich ihn doch angelegt habe

    Hab ich jetzt nicht ausprobiert, aber ...
    vermutlich mußt Du erst den Schlüssel SOFTWARE öffnen, und dann mit dem erhaltenen HKEY den Schlüssel TEST, also immer schön der Reihe nach.



  • auch das hab ich grad probiert:

    LONG result;
    	HKEY hkey,hsubkey;
    
        result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE", 0, KEY_ALL_ACCESS, &hkey);
    	if (result==ERROR_SUCCESS)
    	{
            printf("SOFTWARE opened");
    		result = RegOpenKeyEx(hkey, L"TEST", 0, KEY_ALL_ACCESS, &hsubkey);
    		if (result==ERROR_SUCCESS)
    		{
    			printf("TEST opened");
    			RegCloseKey(hsubkey);
    		}
            RegCloseKey(hkey);
        }
    

    genau die gleiche Fehlermeldung. Ich schnalls nicht



  • So, öffnen des TEST - Schlüssels direkt müsste mit folgendem String gehen:

    "SOFTWARE\\TEST"

    so hab ich es gerade in einem anderen Programm gefunden.



  • sollte man meinen, aber "Das System kann die angegebene Datei nicht finden"...
    Aber der Schlüsse "TEST" existiert



  • Also SOFTWARE kannst Du öffnen, TEST dann aber nicht mehr? Dann weiß ich auch nicht mehr weiter ...



  • trotzdem vielen Dank soweit. Eventuell fällt ja noch jemand anderem etwas ein. Oder vll. finde ich noch den richtigen Hinweis mit google, wobei mir langsam die Suchbegriffe ausgehen


Anmelden zum Antworten