سؤال

هل يعرف أي شخص كيف يمكنني نقل السجل من 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());
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top