7

В реестре Windows добавление строкового значения LegacyDisable к ключу служит для указания Windows игнорировать ключ, его значения и любые его подразделы и подзначения, фактически отключая его.

Например, добавив строковое значение LegacyDisable к следующему ключу:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\opennewwindow

... отключает opennewwindow , удаляя пункт "Открыть в новом окне" из контекстного меню проводника Windows. Инструменты очистки контекстного меню CCleaner также используют LegacyDisable для этой цели.

Тем не менее, документация по строковому значению не существует; Я не смог найти что-либо, документирующее это, ни здесь, ни через Google, поэтому я не понимаю, откуда это взялось, является ли отключение ключей реестра тем, для чего он когда-либо был предназначен, и почему это не документировано. ,

Является ли отключение ключей реестра LegacyDisable единственной целью?

Когда он используется для отключения ключей реестра, как его поведение отличается от другого метода, используемого CCleaner - добавление простого текста к шестнадцатеричным данным строкового значения? Почему CCleaner использует оба метода?

1 ответ1

4

Я выполнил небольшую работу над LegacyDisable, которую подробно описал ниже.

Этот метод описан Microsoft в статье Глаголы и ассоциации файлов - Регистрация глаголов для обратной совместимости:

Некоторые приложения могут искать в реестре ключи глаголов , которые больше не используются. Для этого эти ключи можно оставить в реестре с добавлением значения LegacyDisable к ключу глагола, который сообщает системе, что глагол не является действительным глаголом, но существует исключительно для обратной совместимости.

Использование значения LegacyDisable показано здесь. Значение только должно присутствовать; он может иметь любой тип значения (хотя REG_NONE является наиболее подходящим) и не требует каких-либо данных, связанных с ним. Если данные присутствуют, они игнорируются.

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

Использование LegacyDisable, по-видимому, ограничено для отключения глаголов контекста оболочки, поскольку это всегда описано только в этом контексте.

Этот метод используется утилитой ShellMenuView, в которой говорится, что "этот ключ реестра не поддерживается Windows 98", поэтому кажется, что он возник в Windows NT.

Я нашел этот метод упоминается в двух книгах:

  • Windows 7 раздражает (2010), стр. 179:

Видите пункт контекстного меню, от которого хотите избавиться? Просто удалите соответствующий ключ действия (например, New, Open, Print), и он сразу исчезнет. Еще лучше, добавьте строковое значение с именем LegacyDisable к ключу, чтобы скрыть его в проводнике Windows без необходимости что-либо удалять.

  • Устранение неполадок реестра Windows, стр. 100

В этих местах вы увидите подразделы для стороннего программного обеспечения, которое подключилось к вашим контекстным меню. Есть несколько способов справиться с ними. Вы можете удалить ключи, чтобы удалить их полностью. Чтобы заставить их отображаться только по нажатию Shift+ правой кнопкой мыши, добавьте строковое значение к каждому из них с именем "Extended" или оставьте их в реестре, но отключите их, добавьте строковое значение с именем "LegacyDisable".

Я думаю, что это обо всей полезной информации, которую можно найти для LegacyDisable.

Что касается того, почему CCleaner использует этот метод вместе с другим методом уничтожения ключа, я могу сделать только две гипотезы:

  1. Код был написан двумя разными программистами, один из которых не знал о LegacyDisable
  2. Метод уничтожения ключа используется в тех случаях, когда LegacyDisable не работает (не глаголы контекста оболочки).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .