web-dev-qa-db-ja.com

Windowsレジストリでは、「LegacyDisable」文字列値とは何ですか。また、正確には何をしますか。

Windowsレジストリでは、キーにLegacyDisable文字列値を追加すると、キー、その値、およびそのサブキーとサブ値を無視して、事実上無効にするようにWindowsに指示することができます。

たとえば、次のキーにLegacyDisable文字列値を追加します。

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\Shell\opennewwindow

... opennewwindowを無効にし、Windowsエクスプローラーのコンテキストメニューから[新しいウィンドウで開く]項目を削除します。 CCleaner のコンテキストメニュークリーンアップツールも、この目的でLegacyDisableを利用します。

ただし、文字列値に関するドキュメントは存在しないようです。ここでもGoogleでも、それを文書化するものをまったく見つけることができなかったので、それがどこから来たのか、レジストリキーを無効にするだけが意図されていたのか、なぜ文書化されていないのかについて混乱しています。 。

レジストリキーを無効にすることはLegacyDisableの唯一の目的ですか?

レジストリキーを無効にするために使用される場合、その動作はCCleanerで採用されている他の方法とどのように異なりますか?文字列値の16進データの前にプレーンテキストを追加しますか? CCleanerが両方の方法を採用しているのはなぜですか?

8
Hashim

LegacyDisableについて、以下で詳しく説明する調査作業を行いました。

この方法は、Microsoftの記事 動詞とファイルの関連付け-下位互換性のための動詞の登録 :に記載されています。

一部のアプリケーションは、使用されなくなった動詞キーをレジストリで検索する場合があります。そのために、これらのキーは、動詞のキーにLegacyDisable値を追加してレジストリに残すことができます。これにより、動詞は実際の動詞ではなく、下位互換性の目的でのみ存在することがシステムに通知されます。

LegacyDisable値の使用をここに示します。値が存在する必要があるだけです。これは任意の値タイプにすることができ(ただし、REG_NONEが最も適切です)、データを関連付ける必要はありません。データが存在する場合、それは無視されます。

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

LegacyDisableの使用は、常にこのコンテキストでのみ記述されるため、シェルコンテキスト動詞を無効にする場合に制限されているようです。

このメソッドはユーティリティ ShellMenuView で使用され、「このレジストリキーはWindows 98でサポートされていません」と表示されているため、WindowsNTで作成されたようです。

私はこのメソッドが2冊の本で参照されているのを見つけました:

  • Windows 7の煩わしさ(2010)、179ページ:

削除したいコンテキストメニュー項目が表示されますか?対応するアクションキー([新規]、[開く]、[印刷]など)を削除するだけで、すぐに消えます。さらに良いことに、LegacyDisableという名前の文字列値をキーに追加して、何も削除せずにWindowsエクスプローラーで非表示にします。

  • Windowsレジストリのトラブルシューティング、100ページ

これらの場所の下に、コンテキストメニューにプラグインされたサードパーティソフトウェアのサブキーが表示されます。それらを処理する方法はいくつかあります。キーを削除して完全に削除できます。 Shiftキーを押しながら右クリックしたときにのみ表示するように強制するには、「Extended」という文字列値をそれぞれに追加するか、レジストリに残して無効にするには、「LegacyDisable」という文字列値を追加します。

LegacyDisableで見つけることができるすべての有用な情報についてだと思います。

CCleanerがキーを破壊する他の方法と一緒にこの方法を採用する理由に関して、私は2つの推測しかできません:

  1. コードは2人の異なるプログラマーによって書かれ、そのうちの1人はLegacyDisableについて知りませんでした。
  2. キー破棄メソッドは、LegacyDisableが機能しない(シェルコンテキスト動詞ではない)場合に使用されます。
5
harrymc