문제

누구든지 hkey_local_mcahine에서 hkey_current_user로 레지스트리를 프로그래밍 방식으로 이동할 수있는 방법을 아는 사람이 있습니까?

RegenumkeyEx와 RegenumValue를 사용하는 재귀 함수를 작성했지만 RegenumValue는 최상위 키로 모든 값을 반환하는 것으로 보입니다.

예를 들어, 키가 hkey_local_machine software myapp keyname1 인 경우, 그 아래에 3 값이 있고 hkey_local_machine software myapp keyname2가 있으며 2 값이 있습니다. RegenumkeyEx가 적절한 키를 반환하는 것처럼 보이지만 첫 번째 키 (예 : Keyname1)에 대해 RegenumValue를 호출 할 때 해당 키 아래 3이 아니라 5 개의 값이 모두 반환됩니다.

모든 것이 말이되기를 바랍니다 ... 내가 뭔가 잘못하고 있습니까?

도움을 주셔서 감사합니다

도움이된다면 스 니펫이 있습니다.

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();
}

즉, 위의 GetAllDatanames는 단순히 RegenumValue를 호출하고 getAllSubkeys 호출 RegenumkeyEx.

도움이 되었습니까?

해결책

모든 레지스트리 기능을 살펴보면, 나는 이것을 발견했습니다 : shcopykey 또는 나는 이것을 사용할 수 있습니다 : Vista를위한 regcopytree 이상.

도와 주셔서 감사합니다.

다른 팁

나는 이것에 대한 전문가가 아니지만 이와 같은 것을 시도하십시오.

  RegistryKey myKey = Registry.LocalMachine.OpenSubKey(
  @"SOFTWARE\\" + csStartKey, 
  false);
Registry.CurrentUser.CreateSubKey
        (myKey.ToString());
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top