2013年12月5日木曜日

アプリケーションの互換性について - 実践編 (Windowsの本当の力を知っていますか?)

アプリケーションの互換性について - 実践編 (Windowsの本当の力を知っていますか?)



アプリケーション 互換性エンジン を 環境変数 で制御する方法

いよいよクリスマスシーズン到来となりましたね。
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つです。
この環境変数の利用方法の例としては、以前の投稿を参照ください。 

仮想アプリとUACについて(裏技あり)

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で設定するWnXPSP319個のShimが有効になる? 互換モードのタブで設定した内容に近い?
APITracing
不明
AppRecorder
不明
DW
不明
EnableIISBizTalk
不明
FDR
不明
ForceDxSetupSuccess
不明
IgnoreAdobeKMPrintDriverMessageBox
不明
International
不明
iTunesAutoplay
不明
Layer_Force640x480x8
不明
Layer_ForceDirectDrawEmulation
不明
MsiAuto
不明
NullEnvironment
不明
pLayerGetProcAddrExOverride
不明
ProfilesSetup
不明
RedirectCHHlocaletoCHT
不明
VerifyVersionInfoLiteLayer
不明
VistaSetup
不明
WRPMitigationLayer
不明

2個以上のパラメータをセットする場合は、半角スペースを利用します。
例)そのままの権限で実行&WinXPSP3のバージョン偽装&ソートをWin2003にする
__COMPAT_LAYER
RunAsInvoker WinXPSP3VersionLie EmulateSorting



注意:
Windowsのアプリケーション互換機能を利用するためには、
「アプリケーションの互換性エンジンを有効」にする必要があります。
Windows7では、既定で有効になっています。WindowsXPでも既定値は有効

まれに、GPOを利用して「アプリケーションの互換性エンジンをオフ」にしているケースがありますが
せっかくの互換エンジンを無効にすると、互換性機能がまったく利用できなくなりますので
注意して下さい。

「コンピュータの構成」-「管理用テンプレート」-「Windowsコンポーネント」-「アプリケーションの互換性」

未構成か無効にする必要があります。

当然ですが「互換性エンジンをオフにする」を有効にすると、互換エンジンが動きません。。。



明日は、「仮想デスクトップなう」の@hamboxesさんのターンです。乞うご期待!