[基礎解説]
Windowsの互換性テクノロジの仕組み(後編)

2.ACTで「互換性データベース」を作る

佐藤 芳樹
2010/06/30
2010/07/01更新
Page1 Page2 Page3

「互換性データベース」とは?
 ACTに含まれるCompatibility Administratorというツールには、365個のshimが収録されている。任意のアプリケーションに対してWindows互換性テクノロジを利用するには、これらのshimのうち、必要なものを組み合わせて「互換性データベース」を作成し、アプリケーションに対してそれを適用する必要がある。前編で紹介したWindows XP Service Pack 2互換モードはデフォルトで用意されている互換性データベースの1つだ。Compatibility Administratorには、このような互換性データベースが59個用意されている。

shimと互換性データベースの関係
必要なshimを組み合わせて作成されたものが互換性データベースである。

 なお、実際に利用できるshimの数は、対象アプリケーションを実行するWindows OSによって変わる。例えばWindows 7では前述の365個のshimが利用できるが、Windows XP SP2ではもっと少ない。なぜなら、「WinXPSP3VersionLie」「VistaRTMVersionLie」といった新しいOSのバージョンを偽装するshimのように、Windows OSによっては原理的に不要なshimが存在するからだ。Compatibility Administratorでも、インストールしたWindows OSに必要なshimだけがリストアップされる。

 こうした理由もあって、Compatibility Administratorで互換性データベースを作成する作業用のWindows OSは、対象アプリケーションを実行するWindows OSと同じバージョンに合わせることが推奨されている。

互換性データベースの作り方
 Compatibility Administrator を使用すると、指定したアプリケーションに対して、デフォルトで用意されている互換性データベースやshimを組み合わせて、新しい互換性データベースを作成できる。アプリケーションが複数の実行ファイルで構成されている場合には、それぞれの実行ファイルに対して必要な互換性データベースを作成し、1つの互換性データベース・ファイルとして保存可能なので、複雑な構成のアプリケーションにも互換性データベースは適用できる。また、前述のとおりACTのプログラム自体は英語版だが、各shimには日本語の説明文が付いているので、利用に際してそれほど難易度は高いものではない。

Compatibility Administratorの画面
これはWindows XP Service Pack 2互換モードのためにデフォルトで用意されている互換性データベースと、前編で説明したWRP用のshim「WRPRegDeleteKey」を組み合わせて新しい互換性データベースを作成している例。

 では、ここからは古いデータベース・ソフトウェア「Microsoft Access 97」向けに開発されたアプリケーションを例に、互換性データベースを作成する手順について説明していく。このアプリケーションは、Windows 7で実行すると起動時に次のようなエラーが発生してしまい、このままでは正常に使用できない。

互換性問題によるエラーの例
これは、古いデータベース・ソフトウェア「Microsoft Access 97」用のあるアプリケーションをWindows 7上で実行したところ。このように起動直後にエラーが発生してしまう。

 ちなみにWindows 7で発生する互換性問題としては、今回の例のほかにも、利用途中にエラーを発生するものや、何も応答なしに処理に失敗してしまうものなどさまざまな現象が生じ得る。もっとも、本稿の例と現象が異なっても、その原因を解決するshimから互換性データベースを作成し、アプリケーションに適用するという手順そのものは共通だ。

 さて、Compatibility Administratorを起動して、このアプリケーションを修復するための互換性データベースの作成手順は以下のとおりだ。

【手順1】
 まず、互換性データベースを作成するためのウィザードを開始する。それには管理者権限でCompatibility Administratorを起動し、左側ツリーのツリーから[Custom Database]−[New Database]を右クリックし、コンテキスト・メニューの[Create New]−[Application Fix]を選択していく。すると以下のウィザード画面が表示されるので、修復対象のアプリケーションの名前、提供元、そしてアプリケーションの実行ファイルのパスを入力する。

互換性データベースの作成(1): アプリケーションの指定
ウィザードを開始して対象アプリケーションを選択する。
対象のアプリケーションの名前を指定する。これが、これから作成する互換データベースの名前にもなる。
対象のアプリケーションの提供元を指定する。
修復対象のアプリケーションの実行ファイルを指定する。

【手順2】
 あらかじめ用意されている互換性データベースからベースとするものを選択する。ここでは、よく使用されるOSバージョンを偽装するための互換性データベース(画面左)だけでなく、前述のとおり59個の用意された互換性データベースからも選択できる。

互換性データベースの作成(2): ベースの互換性データベースの選択
用意されている互換性データベースからベースとするものを選択し、必要に応じて動作検証を行う。
OSバージョンを偽装するための互換性データベースを選択するメニュー。
個別に用意された互換性データベース。
これをクリックすると、で選択した互換性データベースを、実際にアプリケーションに適用したときの動作を確認できる。

 選択後には、必要に応じて[Test Run]ボタンを押し、互換性データベース適用後のアプリケーションの動作を確認できる。

【手順3】
 あらかじめ用意されている365個の互換性フィックス(shim)から必要なものを選択する。前の画面でベースの互換性データベースを選択していると、その中に含まれている互換性フィックスが自動選択されているので、必要に応じて個別に追加もしくは削除していく。

互換性データベースの作成(3): 互換性フィックス(shim)の個別指定
用意されている互換性フィックス(shim)から必要なものを選択し、必要に応じて動作検証を行う。
適用できるshimの一覧。必要に応じてチェックをオン/オフして追加または削除する。ベースとする互換性データベースが選択済みの場合、そのデータベースに含まれるshimも自動的に選択されている(チェックがオンになっている)。
これをクリックすると、で選択した互換性データベースを、実際にアプリケーションに適用したときの動作を確認できる。

 詳細は次ページで説明するが、Compatibility Administratorの隠しオプションを利用することにより、利用可能な互換性フィックスを365個から807個に増やすこともできる。

【手順4】
 互換性データベースがアプリケーションを識別するための情報を選択する。この情報は、実行ファイルの名前やアプリケーションの製造元名、製品名、ファイル名、バージョン番号などから選択できる。これらの情報は、アプリケーションとその起動時に適用されるべき互換性データベースをひも付けするために利用される。

互換性データベースの作成(4): アプリケーションの識別情報の指定
アプリケーションを特定するために必要な情報を選択する。
識別対象のプログラム・ファイルを追加/削除するには、これらのボタンをクリックする。
で追加したプログラム・ファイルに対して、識別に用いる情報を選択する。
これをクリックすると、追加したプログラム・ファイルが分析され、自動的に識別情報が選択される。

 以上で互換性データベースの作成ウィザードは完了だ。

【手順5】
 作成した互換性データベースを保存する。それには、Compatibility Administratorの左側ツリーで作成済みの互換性データベースを選択した後、[File]−[Save As]をクリックする。保存場所はどこでも構わないが、Windows 7には%SystemRoot%\AppPatchというフォルダにOSがデフォルトで持っている互換性データベースがいくつか格納されているので、このフォルダを活用するのも1つの方法といえる。

 保存された互換性データベースは.sdbという拡張子のファイルとなる。ちなみにWindows XP Service Pack 2互換モードのみを含む互換性データベースを作成したところ、そのサイズは648bytes程度と非常に小さかった。

【手順6】
 互換性データベースを保存したら、それを対象のアプリケーション起動時に適用されるように設定する。Compatibility Administratorの場合は、左側ツリーで保存済みの互換性データベースを右クリックし、コンテキスト・メニューから[Install]をクリックする。以後は、対象のアプリケーションを実行すると、その互換性データベースが自動的に適用され、データベース内に含まれるshimが互換性問題を解決すべく稼働するようになる。

 Compatibility Administratorなしでも、互換性データベースのファイルを単体で各PCに展開して適用(インストール)できる。その手順の詳細は次のページの「互換性データベースの展開と管理手法」で説明する。

 以下は、今回の例で作成した互換性データベースをインストールした結果、アプリケーションが正常に動作した画面である。

互換性データベースを用意することで互換性問題を回避できた例
作成した互換性データベースを適用することで、デフォルトでは動作しなかったAccess 97向けアプリケーションが実行可能になった。特定APIでの並び替え動作を有効にする「EmulateSorting」というshimを適用している。

 次のページでは、互換性データベースに収録するshimの探し方や互換性データベースの展開方法、Windows互換性テクノロジの限界、その高度な活用方法について解説する。



 INDEX
  [基礎解説]Windowsの互換性テクノロジの仕組み(前編)
    1.互換性問題が生じるワケ
    2.Windows 7との互換性を確保する「shim」
    3.互換性テクノロジが効果を発揮する場面
 
  [基礎解説]Windowsの互換性テクノロジの仕組み(後編)
    1.Application Compatibility Toolkit(ACT)とは?
  2.ACTで「互換性データベース」を作る
    3.Windows互換性テクノロジの限界と活用

更新履歴
【2010/07/01】 「『互換性データベース』とは?」において、対象アプリケーションを実行するWindows OSによって実際に利用できるshimの数が変わること、および互換性データベースの作成に用いるOSは対象OSと同じバージョンが推奨されることを追記しました。また「互換性データベースの作り方」の画面「互換性データベースを用意することで互換性問題を回避できた例」において、例に挙げたアプリケーションに適用したshimの名称を明記しました。
 
 基礎解説

 「Windows XP→Windows 7移行支援記事集」



Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間