Programmatische bewegen Registrierungsschlüssel
Frage
Wer weiß, wie ich kann programmaically eine Registrierung von HKEY_LOCAL_MCAHINE zu HKEY_CURRENT_USER bewegen?
Ich schrieb eine rekursive Funktion, die RegEnumKeyEx und RegEnumValue verwendet, aber es scheint, dass RegEnumValue alle Werte unter der Top-Level-Taste zurück.
Zum Beispiel, wenn der Schlüssel HKEY_LOCAL_MACHINE \ SOFTWARE \ MyApp \ KeyName1 und hat 3 Werte darunter, und ich habe HKEY_LOCAL_MACHINE \ SOFTWARE \ MyApp \ Schlüsselname2 und das hat zwei Werte. Es sieht aus wie RegEnumKeyEx ist, die richtigen Tasten zurückkehren, aber wenn ich RegEnumValue zum ersten Key nennen (dh. KeyName1) i erhalten alle 5 Werte zurückgegeben und nicht nur die 3 unter diesem Schlüssel.
Ich hoffe, dass alles Sinn macht ... bin ich etwas falsch zu machen?
Vielen Dank für jede Hilfe
Hier ist ein Ausschnitt, wenn es hilft:
void CArgusApp::RecurseSubKeys(CString csStartKey)
{
CQERegistry reg;
HRESULT hr = reg.Open(HKEY_LOCAL_MACHINE, "SOFTWARE\\" + csStartKey, KEY_QUERY_VALUE );
CStringArray csaDataNames;
reg.GetAllDataNames(csaDataNames);
for (int j = 0; j < csaDataNames.GetSize(); j++)
{
CString csValueName = csaDataNames.ElementAt(j);
TRACE(csStartKey + " - " + csValueName);
}
CStringArray csaKeys;
reg.GetAllSubKeys(csaKeys);
for (int i = 0; i < csaKeys.GetSize(); i++)
{
CString csKey = csaKeys.ElementAt(i);
this->RecurseSubKeys(csStartKey + "\\" + csKey);
}
reg.Close();
}
d. GetAllDataNames oben ruft einfach RegEnumValue und GetAllSubKeys RegEnumKeyEx nennen.
Lösung
alle Registrierungsfunktionen der Suche durch, fand ich diese: SHCopyKey oder kann ich diese verwenden. RegCopyTree für Vista und später
Danke für die Hilfe.
Andere Tipps
Ich bin kein Experte auf diesem, sondern versuchen, so etwas wie diese.
RegistryKey myKey = Registry.LocalMachine.OpenSubKey(
@"SOFTWARE\\" + csStartKey,
false);
Registry.CurrentUser.CreateSubKey
(myKey.ToString());