تحريك مفاتيح التسجيل برمجيا
سؤال
هل يعرف أي شخص كيف يمكنني نقل السجل من HKEY_LOCAL_MCAHINE إلى HKEY_Current_user؟
لقد كتبت وظيفة متكررة تستخدم RegenumKeyex و RegenumValue ، لكن يبدو أن RegenumValue يعيد جميع القيم تحت مفتاح المستوى الأعلى.
على سبيل المثال ، إذا كان المفتاح هو hkey_local_machine software myapp keyname1 ولديه 3 قيم تحتها ولدي hkey_local_machine software myapp keyname2 وهذا له قيمتان. يبدو أن RegenumKeyex يعيد المفاتيح المناسبة ، لكن عندما أدعو RegenumValue للمفتاح الأول (أي keyname1) أحصل على جميع القيم الخمسة وليس فقط 3 تحت هذا المفتاح.
أتمنى أن يكون كل شيء منطقيًا ... هل أفعل شيئًا خاطئًا؟
شكرا على اي مساعدة
إليك مقتطف ، إذا كان يساعد:
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();
}
IE GetAllDatanames أعلاه ببساطة يدعو RegenumValue و Getallsubkeys Call RegenumKeyex.
المحلول
عند النظر إلى جميع وظائف التسجيل ، وجدت هذا: shcopykey أو يمكنني استخدام هذا: regcopytree لـ Vista ثم لاحقًا.
شكرا للمساعدة.
نصائح أخرى
أنا لست خبيراً في هذا ، لكن جرب شيئًا كهذا.
RegistryKey myKey = Registry.LocalMachine.OpenSubKey(
@"SOFTWARE\\" + csStartKey,
false);
Registry.CurrentUser.CreateSubKey
(myKey.ToString());