第3回 アプリケーションの互換性:64bit Windows時代到来(3/3 ページ)
64bitアプリケーションでは大量のメモリを扱えるが、DOSやWin16のアプリケーションは実行できないし、32bit DLLも呼び出せない。そしてIEが2種類ある理由とは?
Win64アプリケーションから直接32bitのDLLコードを呼び出すことはできないため、アプリケーションの開発者は、Win64版の開発に当たってはなんらかの対策を行う必要がある。COM(ActiveXなどで利用しているベース技術)呼び出しにおいては、「インプロセスのCOM」の利用は止めて、「アウトプロセスのCOM」やRPC(リモート手続き呼び出し)にして、プロセスを分離するなどの方法がある。同一プロセス内では32bitと64bitのコードは混在できないが、32bitプロセスと64bitプロセスというようにプロセスを分けてしまえば問題はない。詳細は開発者向けのサイトなどを参照していただきたい。
さてプロセスさえ分けてしまえば32bit版と64bit版のアプリケーションは同時に実行できそうだが、場合によってはやはり制限を受けることがある。以下は、Office 2010における例である。64bit版のOffice Professional Plus 2010スイートがインストールされている64bit版Windows OS環境に、新たに32bit版のOffice Visio Premium 2010を追加インストールしようとしたところ、このようなエラー・ダイアログが表示された。
32bit版Officeコンポーネントのインストールにおけるエラー
64bit版Office Professional Plus 2010環境に、新たに32bit版のOffice Visio Premium 2010を追加インストールしようとすると、このようなエラーが表示される。Office 2010は32bit版と64bit版の混在を許さない。
WordやExcel、Visioなどはそれぞれ別の実行ファイルとして構成されているため(つまり別プロセスとして実行されるため)、32bit版と64bit版は混在してインストールしたり、同時に実行したりできそうである。だがアプリケーションの作り方によってはこのように、異なるアーキテクチャ(32bit/64bit)のコンポーネントを1つのシステムにインストールすることができない。トラブルの発生などを考えると、クライアント向けPCでは、無理に64bit版を導入する必要はないだろう。第1回で述べたように、1つ1つのプロセスは従来の32bitアプリケーションのままでも、システム全体としては、(オーバー4Gbytesという)多くのメモリを効率よく利用できるようになるのが64bit Windowsの一大利点である。
ところでOffice 2010ではMicrosoft Officeの歴史上、初めて64bit版が用意されたが、具体的なメリットはPowerPointで巨大なビデオなどを貼り込んで処理できるとか、Excelで非常に大きな表が処理できるといったことが主なものである。詳細は以下のサイトなどを参照していただきたいが、64bit版における不具合やデメリットも少なからずある。エディションを選ぶ場合は注意していただきたい(下のサポート技術情報には、「特にニーズがない限り、32bit版を勧める」と書かれていたりする)。
- Microsoft Office の 32 ビット版と 64 ビット版を選択する(マイクロソフトOfficeサイト)
- Office 2010 64 ビット版 環境での注意点(Microsoft Office フォーラム)
- 64 ビット版の Office 2010 をインストールした後、データシート ビューでリストを表示することができない(サポート技術情報)
- Understanding 64-Bit Office[英語](Microsoft Office 2010 Engineeringブログ・サイト)
環境変数とインストール・パス
最後に、64bit版Windows OSにおける、システム・ファイルのパスおよび環境変数について述べておこう。
システム管理業務などにおいて、バッチ・ファイルやWSHスクリプトなどを使って定型処理を行うことがある。64bit版Windowsは従来の32bit版と極力互換性を持つように作られているとはいえ、いくらか違いがあるが、フォルダの名前付けもその1つである。
32bit版Windowsではアプリケーションは、デフォルトでは「C:\Program Files」フォルダの下に保存されている。だが64bit版Windowsでは、32bitアプリケーションと64bitアプリケーションでフォルダを分けている。64bitアプリケーションは基本的には「C:\Program Files」、32bitアプリケーションは「C:\Program Files (x86)」にそれぞれインストールされる。
64bit版Windows 7インストール直後のフォルダ・ツリー
32bitと64bitのアプリケーションのインストール先が明確に分離されている。これにより、Internet Explorerのように、同じアプリケーションでもアーキテクチャによってインストール先を別にすることができる。
(1)64bit版アプリケーションのインストール先。
(2)32bit版アプリケーションのインストール先。
(3)64bit版Internet Explorerのインストール先。
(4)32bit版Internet Explorerのインストール先。
とはいえ、このようなフォルダを直接パス名で指定していたのでは、バッチやスクリプトなどで利用するのは困難である。32bit版Windowsと64bit版Windowsでフォルダ名などが異なるし、OSのバージョンによっては、それら以外のパスなども異なっているからだ。プログラムで利用する場合は、このような絶対パス名をそのまま使わず、環境変数を経由してアクセスしていただきたい。以下に、64bit版Windowsで拡張されたものも含めた環境変数の一覧を挙げておく。
変数名 | 用途 |
---|---|
ALLUSERSPROFILE | ユーザー共通のプログラム・データ・フォルダ |
APPDATA | ユーザーごとのローミング・アプリケーション・データ・フォルダ |
CommonProgramFiles | Win64用Common Filesフォルダ |
CommonProgramFiles(x86) | Win32用Common Filesフォルダ |
CommonProgramW6432 | 共通Common Filesフォルダ |
LOCALAPPDATA | ユーザーごとのローカル・アプリケーション・データ・フォルダ |
PROCESSOR_ARCHITECTURE | CPUアーキテクチャ |
ProgramData | 共通のプログラム・データ・フォルダ |
ProgramFiles | Win64用プログラム・フォルダ |
ProgramFiles(x86) | Win32用プログラム・フォルダ |
ProgramW6432 | 共通プログラム・フォルダ |
PUBLIC | パブリック・フォルダ |
SystemDrive | システム・ドライブ |
SystemRoot | システム・ルート |
windir | Windows OSインストール・フォルダ |
Windows OSにおける環境変数(抜粋) 一般に使うことの多い変数のみ取り上げる。 |
実際の変数の例は次のようになっている。
※64bit版Windows 7 Ultimateでのデフォルト・インストール状態の環境変数例
C:\>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\user01\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=WIN-HXXJ3T7KSDQ
ComSpec=C:\Windows\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Users\user01
LOCALAPPDATA=C:\Users\user01\AppData\Local
LOGONSERVER=\\WIN-HXXJ3T7KSDQ
NUMBER_OF_PROCESSORS=1
OS=Windows_NT
Path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 26 Stepping 5, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=1a05
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
PUBLIC=C:\Users\Public
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\Windows
TEMP=C:\Users\user01\AppData\Local\Temp
TMP=C:\Users\user01\AppData\Local\Temp
USERDOMAIN=WIN-HXXJ3T7KSDQ
USERNAME=user01
USERPROFILE=C:\Users\user01
windir=C:\Windows
C:\>
これらの変数を使えば、例えば64bit版のInternet Explorerを起動するバッチ・コマンドは次のようになる。
※Internet Explorerを起動するバッチ・コマンドのサンプル。64bit版Windows OSの場合は64bit版Internet Explorerを起動する
if exist "%ProgramFiles(x86)%" (
"%ProgramFiles(x86)%\Internet Explorer\iexplore.exe" http://www.atmarkit.co.jp/
) else (
"%ProgramFiles%\Internet Explorer\iexplore.exe" http://www.atmarkit.co.jp/
)
今回は64bit版Windows OS環境におけるアプリケーションの互換性問題について見てきた。次回は連載の最後として、64bit版Windows OS導入時の最大の懸念事項と思われる、64bit版デバイス・ドライバの話題について触れる。
Copyright© Digital Advantage Corp. All Rights Reserved.