web-dev-qa-db-ja.com

コマンドラインから実行可能ファイルの互換モードを設定するにはどうすればよいですか?

XP option(右クリック/プロパティ)との互換性を設定する方法はありますか/ compatibility ...その1つ、はい:)コマンドラインから実行可能ファイルに?

さらに良いことに、互換性をディレクトリ全体(ディレクトリ内の実行可能ファイル)に設定して、コンパイル/ビルドされるすべての実行可能ファイルに「フラグ」がすでにあるようにする方法はありますか?

21
Rook

アプリケーション互換性フラグを設定または変更できるツールがわかりません。

ただし、アプリケーション互換性フラグはレジストリ(ユーザーまたはシステムパーツ)に保存されます。

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

したがって、標準のコマンドラインレジストリエディタを使用して、必要なエントリを作成できます。

reg.exe Add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\Program Files\MyApp\Test.exe" /d "WINXPSP3"

使用可能なフラグの詳細については、ブログ投稿 管理者としてのアプリケーションの実行または互換モードでのアプリケーションの実行 を参照してください。

30
Robert

バッチファイルでの使用:

> set __COMPAT_LAYER=WinXP

.exe呼び出しの前

見る:

17
user285687

ロバートの答えは的確だった。少し拡張して、モードの一括設定に関するOPの質問に答えます...

処理する.exeファイルでいっぱいのフォルダーがある場合、これを行うことができます。

for %x in ("*.exe") do reg.exe Add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "%~fx" /d "WINXPSP3"

この例では、HKLMではなくHKCUを使用しています。本当に欲しいものを選んでください。

設定を削除するには、それぞれの確認プロンプトで:

for %x in ("*.exe") do reg.exe Delete "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "%~fx"

追加 /f確認のプロンプトが表示されないようにする場合は、最後に。

(この回答に投票する場合は、ロバートにも投票してください!)

11
Mike Brown