検索
連載

第3回 アプリケーションの互換性64bit Windows時代到来(3/3 ページ)

64bitアプリケーションでは大量のメモリを扱えるが、DOSやWin16のアプリケーションは実行できないし、32bit DLLも呼び出せない。そしてIEが2種類ある理由とは?

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

 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版を勧める」と書かれていたりする)。

環境変数とインストール・パス

 最後に、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版デバイス・ドライバの話題について触れる。


「64bit Windows時代到来」のインデックス

64bit Windows時代到来

Copyright© Digital Advantage Corp. All Rights Reserved.

前のページへ |       
ページトップに戻る