Pergunta

Alguém sabe como posso mover programação um registro de hkey_local_mcahine para hkey_current_user?

Escrevi uma função recursiva que usa RegenumKeyEx e RegenumValue, mas parece que o RegenumValue retorna todos os valores na chave de nível superior.

Por exemplo, se a chave for hkey_local_machine software myApp keyname1 e possui 3 valores sob ele e eu tenho hkey_local_machine software myApp keyname2 e que possui 2 valores. Parece que a RegenumKeyEx está retornando as teclas adequadas, mas quando eu chamo RegenumValue para a primeira chave (ou seja, keyname1), recebo todos os 5 valores retornados e não apenas os 3 sob essa chave.

Espero que tudo faça sentido ... estou fazendo algo errado?

Obrigado por qualquer ajuda

Aqui está um trecho, se ajudar:

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

ou seja, getalldatanames acima simplesmente chama RegenumValue e Getallsubkeys chamam RegenumKeyEx.

Foi útil?

Solução

Olhando para todas as funções do Registro, encontrei o seguinte: ShcopyKey ou posso usar isso: Regcopytree para Vista e mais tarde.

Obrigado pela ajuda.

Outras dicas

Não sou um especialista nisso, mas tente algo assim.

  RegistryKey myKey = Registry.LocalMachine.OpenSubKey(
  @"SOFTWARE\\" + csStartKey, 
  false);
Registry.CurrentUser.CreateSubKey
        (myKey.ToString());
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top