Pregunta

¿Alguien sabe cómo puedo mover programáticamente un registro de HKEY_LOCAL_MCAHINE a HKEY_CURRENT_USER?

Escribí una función recursiva que usa RegEnumKeyEx y RegEnumValue, pero parece que RegEnumValue devuelve todos los valores bajo la clave de nivel superior.

Por ejemplo, si la clave es HKEY_LOCAL_MACHINE \ SOFTWARE \ MyApp \ KeyName1 y tiene 3 valores debajo, tengo HKEY_LOCAL_MACHINE \ SOFTWARE \ MyApp \ KeyName2 y tiene 2 valores. Parece que RegEnumKeyEx está devolviendo las claves adecuadas, pero cuando llamo a RegEnumValue para la primera Clave (es decir, KeyName1) obtengo los 5 valores devueltos y no solo los 3 bajo esa clave.

Espero que todo tenga sentido ... ¿estoy haciendo algo mal?

Gracias por cualquier ayuda

Aquí hay un fragmento, si ayuda:

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

es decir GetAllDataNames anterior simplemente llama a RegEnumValue y GetAllSubKeys llama a RegEnumKeyEx.

¿Fue útil?

Solución

Mirando a través de todas las funciones de registro, encontré esto: SHCopyKey o puedo usar esto: RegCopyTree para Vista y posterior.

Gracias por la ayuda.

Otros consejos

No soy un experto en esto, pero intente algo como esto.

  RegistryKey myKey = Registry.LocalMachine.OpenSubKey(
  @"SOFTWARE\\" + csStartKey, 
  false);
Registry.CurrentUser.CreateSubKey
        (myKey.ToString());
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top