アプリケーション 互換性エンジン を 環境変数 で制御する方法
いよいよクリスマスシーズン到来となりましたね。
2013年もあと1ヶ月を切りましたね。
光栄なことにvExpert Advent Calendar に参加することになりまして。
「仮想化でプリセールスしてるSEの一日」@ogawadさんに引き続き
今日は私が担当します。 変な脇汗が。。。緊張するなぁ。pv増えると嬉しいなぁ。
以前に投稿した、
「アプリケーションの互換性について (Windowsの本当の力を知っていますか?)」
http://tunemicky.blogspot.jp/2013/08/windows.html
の続編です。
前回は、@ITさんの記事の紹介と、Application Compatibility Toolkit(ACT)、Shimと言う物の存在、Windowsのアプリケーションの互換性に対する思いを簡単に紹介しましたが
今回は、実践編として、隠された環境変数を利用して
アプリケーション互換機能を利用する方法を投稿します。
かなりマニアックな投稿なのであしからず。
参考:
日本語:Application Compatibility Toolkit (ACT) Version 5.6 の概要
http://technet.microsoft.com/ja-jp/library/cc722367(v=ws.10).aspx
ACT5.6のダウンロードURL
http://www.microsoft.com/en-us/download/details.aspx?id=7352
Shimの内容について
http://technet.microsoft.com/ja-jp/library/cc722305(v=ws.10).aspx
アプリケーションの互換性エンジンを利用するためには、
3パターンの方法があります。
1.互換性 機能を利用したいEXEのプロパティから設定する方法
2.Windows OSに互換データベースを追加する方法
ACTに含まれるCompatibility Administratorを利用して、カスタムShimを作成し
SDBINSTコマンドでOSに登録する方法
3.環境変数を利用する方法
それぞれを説明すると長くなるので、今回は、一番マニアックな
「3.環境変数を利用する方法」を紹介します。
※アンドキュメントな内容なので、自己責任でお願いします。
アプリによっては、意図した動作にならないことも多々ありますので、その場合は
他の方法も試してみてください。
環境変数を追加する
変数名: __COMPAT_LAYER
※__COMPAT_LAYERのはじめの2文字は_アンダースコア 2つです。
http://tunemicky.blogspot.jp/2011/10/uac.html
環境変数に利用できるパラメータは以下になります。
設定値
|
説明
|
256Color
|
256色で実行する
|
640X480
|
640 x 480の解像度で実行する
|
ElevateCreateProcess
|
CreateProcessの昇格を無効にする?
|
FaultTolerantHeap
|
FaultTolerantHeapを有効にする
|
HighDpiAware
|
高DPI設定では画面のスケーリングを無効にする
|
DisableCicero
|
このプログラムでは詳細なテキストサービスを無効にする WinXPまで?
|
DisableThemes
|
視覚テーマを無効にする
|
DisableThemeMenus
|
視覚テーマを無効にする?
|
DisableDWM
|
デスクトップ コンポジションを無効にする
|
DisableFadeAnimations
|
フェードアニメーションを無効にする?
|
RunAsHighest
|
持ちうる最高の権限で実行する
|
RunAsHighest_GW
|
不明
|
RunAsInvoker
|
そのままの権限で実行する
|
RunAsAdmin
|
管理者として実行する
|
EmulateSorting
|
ソート順をWindows2003/XPに変更
|
EmulateSortingServer2008
|
ソート順をWindows2008に変更
|
EmulateSortingVista
|
ソート順をWindowsVistaに変更
|
Layer_Win95VersionLie
|
GetVersion/GetVersionExの戻り値
Win95に偽装
|
WinXPSP2VersionLie
|
GetVersion/GetVersionExの戻り値
WinXPSP2に偽装
|
WinXPSp2_GW
|
不明
|
WinXPSP3VersionLie
|
GetVersion/GetVersionExの戻り値
WinXPSP3に偽装
|
VistaRTM_GW
|
不明
|
VistaSP1VersionLie
|
GetVersion/GetVersionExの戻り値
Vista SP1に偽装
|
VistaSP2VersionLie
|
GetVersion/GetVersionExの戻り値
Vista SP2に偽装
|
Win7RTM
|
GetVersion/GetVersionExの戻り値
Win7に偽装
|
WinSrv08SP1
|
GetVersion/GetVersionExの戻り値
Win2008SP1に偽装
|
WinSrv08R2RTM
|
GetVersion/GetVersionExの戻り値
Win2008R2に偽装
|
WinXpSp3
|
ACTで設定するWnXPSP3の19個のShimが有効になる? 互換モードのタブで設定した内容に近い?
|
APITracing
|
不明
|
AppRecorder
|
不明
|
DW
|
不明
|
EnableIISBizTalk
|
不明
|
FDR
|
不明
|
ForceDxSetupSuccess
|
不明
|
IgnoreAdobeKMPrintDriverMessageBox
|
不明
|
International
|
不明
|
iTunesAutoplay
|
不明
|
Layer_Force640x480x8
|
不明
|
Layer_ForceDirectDrawEmulation
|
不明
|
MsiAuto
|
不明
|
NullEnvironment
|
不明
|
pLayerGetProcAddrExOverride
|
不明
|
ProfilesSetup
|
不明
|
RedirectCHHlocaletoCHT
|
不明
|
VerifyVersionInfoLiteLayer
|
不明
|
VistaSetup
|
不明
|
WRPMitigationLayer
|
不明
|
WINSRV03SP1
|
Windows Server 2003 SP1
|
2個以上のパラメータをセットする場合は、半角スペースを利用します。
例)そのままの権限で実行&WinXPSP3のバージョン偽装&ソートをWin2003にする
__COMPAT_LAYER
RunAsInvoker WinXPSP3VersionLie EmulateSorting
注意:
Windowsのアプリケーション互換機能を利用するためには、
「アプリケーションの互換性エンジンを有効」にする必要があります。
Windows7では、既定で有効になっています。WindowsXPでも既定値は有効
まれに、GPOを利用して「アプリケーションの互換性エンジンをオフ」にしているケースがありますが
せっかくの互換エンジンを無効にすると、互換性機能がまったく利用できなくなりますので
注意して下さい。
「コンピュータの構成」-「管理用テンプレート」-「Windowsコンポーネント」-「アプリケーションの互換性」
未構成か無効にする必要があります。
当然ですが「互換性エンジンをオフにする」を有効にすると、互換エンジンが動きません。。。
明日は、「仮想デスクトップなう」の@hamboxesさんのターンです。乞うご期待!