No Registro do Windows, o que é o valor da string “LegacyDisable” e o que exatamente ele faz?

7

No registro do Windows, adicionar o valor da sequência LegacyDisable a uma chave serve ao propósito de instruir o Windows a desconsiderar a chave, seus valores e qualquer uma de suas subchaves e subvalores, desabilitando-a efetivamente.

Por exemplo, adicionando o valor da string LegacyDisable à seguinte chave:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\opennewwindow

... desativa opennewwindow , removendo o item "Abrir em nova janela" do menu de contexto do Windows Explorer. As ferramentas de limpeza do menu de contexto do CCleaner também fazem uso de LegacyDisable para este propósito.

No entanto, a documentação do valor da string parece inexistente; Eu não consegui encontrar nada documentando isso, seja aqui ou via Google, então fiquei confuso sobre de onde veio, se desabilitar as chaves de registro é tudo o que foi pretendido e por que não está documentado .

A desabilitação das chaves de registro é a única finalidade doLegacyDisable?

Quando usado para desabilitar as chaves do registro, como o seu comportamento difere do outro método empregado pelo CCleaner - prepending texto simples para dados hexadecimais de um valor de seqüência de caracteres? Por que o CCleaner emprega os dois métodos?

    
por Hashim 01.03.2017 / 00:48

1 resposta

4

Eu fiz um trabalho de investigação sobre LegacyDisable que detalho abaixo.

Este método é documentado pela Microsoft no artigo Verbos e associações de arquivos - Registrando verbos para compatibilidade com versões anteriores :

Some applications may search the registry for verb keys that are no longer used. For that purpose, those keys can be left in the registry with the addition of the LegacyDisable value to the verb's key, which tells the system that the verb is not an actual verb, but exists solely for the purpose of backward compatibility.

Use of the LegacyDisable value is shown here. The value only needs to be present; it can be of any value type (though REG_NONE is most appropriate) and does not require any data to be associated with it. If data is present, it is ignored.

* KEY_CLASSES_ROOT
  *  Application
    *   shell
       *  open
            (Default) = &Open
            LegacyDisable
            *  command
                (Default) = command line 

O uso de LegacyDisable parece limitado para a desativação de verbos de contexto de shell, como é sempre descrito apenas neste contexto.

Este método é usado pelo utilitário ShellMenuView onde diz "esta chave do Registro não é suportada pelo Windows 98", então parece que se originou no Windows NT.

Eu encontrei este método referenciado em dois livros:

  • Windows 7 Annoyances (2010), página 179:

See a context menu item you want to get rid of? Just delete the corresponding action key (e.g., New, Open, Print), and it’ll disappear immediately. Better yet, add a string value named LegacyDisable to the key to hide it in Windows Explorer without having to delete anything.

  • Solução de problemas de registro do Windows, página 100

Under these locations you will see subkeys for the third-party software that has plugged itself into your context menus. There are several ways to handle them. You can delete the keys to remove them completely. To force them to show only on a Shift+right click, add a string value to each called "Extended", or to leave them in the Registry but disable them, add a string value called "LegacyDisable".

Eu acho que é sobre todas as informações úteis que podem ser encontradas para LegacyDisable.

Por que o CCleaner emprega esse método junto com o outro método de destruir a chave, eu só posso fazer duas conjecturas:

  1. O código foi escrito por dois programadores diferentes, um dos quais não saber sobre LegacyDisable
  2. O método de destruição de chave é usado para casos em que o LegacyDisable faz não funciona (não verbos de contexto de shell).
por 25.05.2017 / 13:57