プログラムを改修しないで Windows 2000 で稼働させるには

対象プラットフォーム

質問

現在、システムに新規導入するクライアントOSを Windows 2000 化する検討を行っている最中です。基本的に現在の業務アプリケーションはそのまま動作させる予定だったのですが、業務アプリケーションの一部が Windows 2000 上で起動しない上、ソースも手元にないため改修も出来ずに困っています。やはり作り直すしかないのでしょうか。

回答

Windows 2000 には、従来のOS向けに開発されたアプリケーションを可能な限り実行できるように、「Application Compatibility Tool」というツールが付属しています。 また、 Windows 2000 SP2 以降や Windows XP Professional/Home Edition では、「互換性モード」という機能も搭載されています。今回のように実行したいアプリケーションが動作しないという場合は利用を検討してみると良いでしょう。

Application Compatibility Toolを利用する

Application Compatibility Tool の実体は Windows 2000 の CD-ROM の SUPPORT フォルダにある APCOMPAT.EXE という名称のツールになりますので、このプログラムを起動します。 SUPPORT/TOOLS にある Windows 2000 Support Tools をインストールしている場合は、このツールも一緒にインストールされますので、スタートメニューから[プログラム]-[Windows 2000 Support Tools]-[Tools]-[Application Compatibility Tool]を順にたどることでも起動可能です。

起動すると、図0のような画面が現れますので、上部のテキストボックスに起動したいアプリケーションを指定の上、アプリケーションの動作環境として指定したいOSを選択してから、OKを押して起動してみて下さい。


図0: Application Compatibility Tool
動作環境のOSとしてWindows 98を指定した例

これで動作しない場合、画面下部にあるチェックボックスのうち、上から3つ目までのものを適宜チェックして動作しないかも確認してみましょう。 うまく動作する設定が確認できたら、一番下のチェックボックスをチェックしてOKを押して下さい。これでこの情報がOSに登録され、次回以降は通常にアプリケーションを起動しても、自動的にこのツールで指定したOSの情報が利用されるようになります。

Windows 2000 で「互換性モード」機能を利用可能にする

Windows 2000 SP2 からは「互換性モード」という機能が搭載されています。 デフォルトでは利用不可能になっていますので、利用可能にするには、管理者権限のあるアカウントで以下のように

regsvr32 %systemroot%\apppatch\slayerui.dll

コマンドを入力してください。 なお一度利用可能にした「互換性モード」を利用不可能にするには、以下のように入力します。

regsvr32 /u %systemroot%\apppatch\slayerui.dll

「互換性モード」を設定する

互換性モード機能を利用可能にした Windows 2000 では、プログラムへのショートカットのプロパティに「Compatibility」というタブが表示されます。 なお、このタブはプログラムの実体のプロパティには現れませんので注意してください。 タブを選択して「互換モードで実行する」をチェックすることで、そのプログラムに対して互換性モード」が有効になります。

図1のようなリストが表示され、Windows 95もしくはWindows NT 4.0 SP5レベルの互換性を選択することができるようになります。


図2: Windows 2000 の Compatibility タブ

Windows XPの「互換性モード」

Windows XP では、 Application Compatibility Tool が提供されていない代わりに、機能が拡張された「互換性モード」がインストールされた時点で利用可能になっています。図1と同様のタブが図2になります。


図2: Windows XP の Compatibility タブ

互換性を保つOSの種類が増えている他、画面関係の互換性維持のため幾つかのチェックボックスが追加されていることが確認できます。 また、 Windows XP には、図3のような互換性ウィザードが含まれているため、互換性の設定をウィザード形式で行うことも可能です。


図3: Windows XPの「互換性ウィザード」
「すべてのプログラム」-「アクセサリ」-「プログラム互換性ウィザード」を順にたどることで呼び出せる。

Windows 2000の互換性モードは機能不足?

実際にツールや互換性モードで行なった設定が有効になっているかどうかを確認する意味で、バージョンの取得を行なう標準的な API である GetVersionEx() という関数を発行するリスト1のようなアプリケーションを作成して確認したところ、 Windows 2000 で Application Compatibility Tool を利用した場合と、 Windows XP で互換性モードを利用した場合は、設定したOSの値が返却されましたが、 Windows 2000 の互換性モードを利用しても設定は反映されませんでした。

いろいろ確認した限り、 Netscape 6.0 を利用した場合は、 Windows 2000 の互換性モードを利用した場合でも互換性モードの設定が反映されているため、機能自体が有効になっていることは確認できましたが、 Application Compatibility Tool で設定した場合と機能差があることは確実のようです。どちらかの方法でうまく動作しなかった場合は、もう一つの方法でも確認を行なってみることをお勧めします。

#include <windows.h>
#include <stdio.h>
#include <conio.h>

int main() {
        OSVERSIONINFO  osvi;

        osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

        GetVersionEx (&osvi);

        printf("OS major:%d, OS minor %d, %s\n", 
                osvi.dwMajorVersion,
                osvi.dwMinorVersion,
                osvi.szCSDVersion);
	printf("Press any key to exit:\n"); _getch();	
        return 0;
}

リスト1: 検証に利用したアプリケーションのソース

Application Compatibility Toolkitを利用する

これらの機能で問題を解決できないときは、 Application Compatibility Toolkit(ACT) を入手して、詳細なカスタマイズを行うことも可能です。 Windows XP 用の ACT は、 CD-ROM の SUPPORT/TOOLS フォルダ以下に ACT20.EXE という名称で格納されています。 また MSDN の Webサイト (http://msdn.microsoft.com/library/default.asp?url=/nhp/Default.asp?contentid=28000911) より、 Windows 2000 用と Windows XP 用の ACT の最新版を入手可能になっています。 ACT をインストールすることで、 図4の QFixApp を始めとする各種ツールが利用可能となり、各アプリケーション毎に、図4のような項目毎の互換性カスタマイズが可能となります。 詳細については、 ACT のヘルプや上記 URL から辿れる情報などを参照してください。


図4: QFixApp の実行例
左側のペインでは、互換性が有効になっている項目にチェックがついている。
右側のペインでは、アプリケーションを識別する情報として何を用いるかを指定できる。

なお、互換性モードを利用した場合に限りませんが、 Microsoft 社はアプリケーションの動作保証等は一切行っておりません。互換性モードは完全な下位互換性を保証するものでもないため、利用にあたっては充分なテストを行うようにしてください。

参考情報

注記・補足

  1. 本文書は、日経Windowsプロ 2002 年 1 月号の「トラブル解決 Q&A コーナー」に掲載された「プログラムを改修しないで Windows 2000 で稼働させるには」の草稿を筆者の方で HTML 化して掲載しているものです。


Copyright (C) 1998-2009 TAKAHASHI, Motonobu
Last update: 2002-10-09 01:28:25 JST
webmaster@monyo.com