web-dev-qa-db-ja.com

Windows8以降の互換モードのレジストリ値のチルダの意味

もともとWindowsNT 4(32ビット)用に作成されたレガシーアプリケーションをサポートする必要がありますが、すべての互換性設定が行われていれば、Windows 10(64ビット)でも正常に動作します。問題は、これらはほとんど手作業で行わなければならないということです。

その目的のために提供できるプログラムまたはスクリプトを作成する方法を見つけようとしています。互換性設定は、名前がアプリケーションパスである値を追加することにより、それぞれHKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\LayersまたはHKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layersの下のレジストリに保存されることをすでに知っています(設定がすべてのユーザーに適用されるか、単一のユーザーのみに適用されるかに応じて)例えばのように

C:\Program Files (x86)\SomeApp\SomeBinary.exe 

次のようなコンテンツを追加します(Windowsとの互換性を有効にするためXP Service Pack 3)

WINXPSP3

windows7で観察されたようにまたは

~ WINXPSP3

windows 8.1(およびWindows 8)で観察されたとおり

そのようなツールを出荷する前に私が理解したいのは:

値の内容を開始するチルダ記号の目的または意味は何ですか?

私はそれを何ヶ月も探していますが(Google、Bing)、今では質問しか見つかりませんでした。それも意味のない(?)である可能性があるという推測だけがあります:

互換モードが[プロパティ]で設定されている場合、Windozeは、値の前にチルダ(〜)の後にスペースを配置します(例: "〜WINXPSP3")。チルダ。

しかし、互換性設定の調整に関するほとんどの提案は、この魔法の文字を大いに処理しているようです。

チルダとHIGHDPIAWAREの間にスペースがあることに注意してください。

それについて本当に何かを知っている人はいますか?

5
Wolf

私はこれと同じことを調べていて、これを見つけました(私の強調):

値にシーケンスチルダ[〜]が含まれている場合、値は文字列のヌル区切りリスト(REG_MULTI_SZ)として解釈されます。たとえば、a、b、cの3つの文字列を含むリストを指定するには、「a [〜] b [〜] c」を使用します。

値内のシーケンス[〜]は個々の文字列を区切り、ヌル文字として解釈および格納されます。

文字列リストの前に[〜]がある場合、その文字列は既存のレジストリ値文字列に追加されます。レジストリ値に追加文字列がすでに含まれている場合は、元の文字列が削除されます。

文字列リストの最後に[〜]が続く場合、その文字列は既存のレジストリ値文字列の前に付加されます。レジストリ値に先頭の文字列がすでに含まれている場合、元の文字列は削除されます。

[〜]が文字列リストの最初と最後の両方にあるか、最初と最後のどちらにもない場合、文字列は既存のレジストリ値文字列を置き換えます。

それ以外の場合、値は文字列(REG_SZ)として解釈および保存されます。

出典:インストーラーデータベースリファレンスの記事 レジストリテーブル(Windows)

したがって、チルダ文字は文字列値を追加または追加するだけのようです。

3
user2441511