[VC++.NET] Registry Eintrag kann nicht gelöscht werden

the incredible Leitman

Erfahrenes Mitglied
ARGL, ich zuck gleich aus :mad:

Seit 3 Stunden spiel ich mich schon damit, aber ich bekomms nicht zusammen -.-

Ich überprüfe am Anfang meiner Applikation ob ein RegEintrag vorhanden ist... wenn keiner da ist, erstell ich einen....
den fülll ich dann mit Werten
so weit, so gut... bis dahin klappt ja auch alles

Aber da das nur ein Testprog ist, möchte ich vom Beenden des Progs den Key wieder löschen...
die Einträge (Values) gehen auch...naja fast, bis auf den "(Standard)" Eintrag... aber den kann ich über Windows->ausführen->regedit auch nicht entfernen -.-

Ich poste mal den Code, vl weiß ja einer von euch, was ich falsch mache:
C++:
int main(array<System::String ^> ^args)
{
	// Enabling Windows XP visual effects before any controls are created
	Application::EnableVisualStyles();
	Application::SetCompatibleTextRenderingDefault(false); 

	try
	{
		
		RegistryKey ^regKey = Registry::LocalMachine;
		regKey = Registry::LocalMachine->OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\XXX888XXX", true);

		// if there is not allready a regKey, create one
		if(regKey == nullptr)
		{
			if (MessageBox::Show("Create one?","No RegistryKey found", MessageBoxButtons::YesNo) == ::DialogResult::Yes)
			{
				// create Registry Key
				MessageBox::Show("CREATE...");

				// Install / Edit Reg Key
				regKey = Registry::LocalMachine->CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\XXX888XXX"); //SOFTWARE\\RDCS\\REGEDIT_TEST XXXX 8888 XXXX\\CurrentVersion");

				// Create data for the regKey
				MessageBox::Show("CREATE VALUES...");
				regKey->SetValue( "Language", "German" );
				regKey->SetValue( "Level", "Intermediate" );
				regKey->SetValue( "ID", 8888 );

				// test if key exists
				MessageBox::Show("TESTING KEY...");
				if(regKey->GetValue("Language", "German") &&
				   regKey->GetValue("Level", "Intermediate") &&
				   regKey->GetValue("ID", 8888))
				{
					MessageBox::Show(" successfully Key Created: " + regKey->Name);

					//now delete RegKey
					MessageBox::Show("DELETING VALUES...");
					regKey->DeleteValue("Language");
					regKey->DeleteValue("Level");
					regKey->DeleteValue("ID");

					if (regKey->GetValue("Language") &&
						regKey->GetValue("Level") &&
						regKey->GetValue("ID") == nullptr)
					{
						MessageBox::Show("Values deleted");
					}

					MessageBox::Show("DELETING KEY...");
					if (regKey != nullptr)
					{
						MessageBox::Show(regKey->ToString());
						regKey->DeleteSubKeyTree("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\XXX888XXX");
					}
					regKey->Close();
				}
				else
				{
					throw gcnew System::Exception(" creating Key not successfull :( ");
				}
			}
			else
			{
				// do nothing
				MessageBox::Show("DO NOT CREATE");
			}
		}
		else
		{
			MessageBox::Show("RegKey Found! " + "Type: " + regKey->GetType() + " Name: " + regKey->Name);
		}
		
	}
	catch (System::Exception ^e)
	{
		throw gcnew Exception(" Error with Registry Edit! " + e);
		
		// in case of an error, delete the regKey if exits
		RegistryKey ^regKey = Registry::LocalMachine->OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\XXX888XXX", true);
		if (regKey != nullptr)
		{
			// Delete
			regKey->DeleteSubKeyTree("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\XXX888XXX");
			regKey->Close();
		}
	}

	// Create the main window and run it
	Application::Run(gcnew Form1());
	return 0;
}

Und in Zeile 55 bekomm ich jedes Mal den Error: "Cannot delete a subkey tree because the subkey does not exist."
:confused: Aber ich überprüf doch vorher ob er noch da ist o_O
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück