レガシー Windows API(概要)について

ここで紹介しているAPIは、Windows95、Windows NT3.5時代のAPI群であり、最新のAPIは含まれていないことに注しして欲しい。なお、当時の解説書は現在よりもより詳細に解説しているため、参考になるはずである。

  • レイアウトを変換する際、崩れているページがあります。
  • 概要およびSampleコードはありますが、APIの解説はありません。

ご要望があれば旧版のWin32 API(HELP形式)をお譲りします。問い合わせフォームより申し込みください。

Windows API ファイル インストール ライブラリの概要

Microsoft(R) Windows NT(TM) のファイル インストール ライブラリによって、 アプリケーションは、 適切なファイルを簡単にインストールできます。また、 現在インストールされているファイルをセットアップ プログラムが解析することができるようになります。

ファイル インストール ライブラリの関数は、 ファイルをインストールする場所の判断、 現在インストールされているファイルとの重複の調査、 インストール処理を行います。ファイル インストール ライブラリの関数によって、 次のような問題を解決できます。

古いバージョンによる新しいバージョンの上書き

複数言語システムでの言語の変更

同じライブラリの複数のディレクトリへの重複インストール

複数のユーザーが共有するネットワーク ディレクトリへのファイルのコピー

また、 ファイル インストール ライブラリには、 バージョン リソースを問い合わせてファイルに関する情報を取得する関数や、 情報をわかりやすい形式で取得する関数があります。ファイルの情報には、 ファイルの使用目的、 作成者、 バージョン番号などがあります。

バージョン情報は、 ダイナミック リンク ライブラリ (DLL) や実行可能ファイル、 フォント ファイルなどの、 Windows(TM) リソースを持つWindowsファイルに付加できます。情報を付加するには、 バージョン リソースを作成し、 リソース コンパイラを使ってファイルにリソースを付加します。

ファイル インストール ライブラリ (VER.DLL) とヘッダー ファイル (VER.H) は、 Windowsベースのアプリケーションでしか利用できません。

次に示すトピックでは、 ファイル インストール ライブラリについて説明しています。

インストール プログラムの作成

ファイル インストール ライブラリ関数

インストール プログラムの作成

通常、 インストール プログラムには、 次のような目的があります。

ファイルを正しい位置に置くこと

インストール プログラムが既存のファイルを明らかに違うファイルで置き換えることをユーザーに通知すること。たとえば、 ドイツ語のファイルを英語のファイルで置き換えるときや、 古いファイルで新しいファイルを置き換えるときなどです。

インストール プログラムを作成するときは、 インストール ディスクの各ファイルに関する次のような情報が必要です。

ファイル (転送元ファイルと呼ばれます) の名前と位置

ユーザーのハードディスクでの対応するファイル (転送先ファイルと呼ばれます) の名前。通常、 この名前は、 インストール ディスクでのファイル名と同じです。

ファイルの共有状態 (ファイルがそのアプリケーションに固有のものか、 複数のアプリケーションで共有するか)

インストール プログラムは、 インストール ディスクの各ファイルに対して、 少なくともVerFindFile関数とVerInstallFile関数を呼び出さなければなりません。これらの関数は、 ここで簡単に説明します。

インストール プログラムは、 VerFindFileに転送先ファイル名を指定することによって、 ファイルをコピーする位置を判断できます。また、 この関数には、 ファイルがアプリケーションに固有のものか共有されるものかも指定します。ファイルの検索時に問題が発生すると、 VerFindFileはエラー値を返します。たとえば、 転送先ファイルをWindowsが使っているときは、 VerFindFileVFF_FILEINUSEを返します。インストール プログラムは、 問題が発生したことをユーザーに知らせて、 ユーザーの決定に応じてインストールを続行するか終了しなければなりません。

VerInstallFileは、 転送元ファイルをVerFindFileが示すディレクトリの一時ファイルにコピーします。必要ならば、 VerInstallFileは、 データ圧縮解除ライブラリLZEXPAND.DLLの関数を使ってファイルを展開します。

VerInstallFileは、 一時ファイルのバージョン情報と転送先ファイルのバージョン情報を比較します。バージョン情報が異なるときは、 VerInstallFile1つ以上のエラーを返します。たとえば、 一時ファイルが転送先ファイルよりも古いときはVIF_SRCOLDを返し、 ファイルの言語識別子やコード ページの値が異なるときはVIF_DIFFLANGを返します。インストール プログラムは、 問題が発生したことをユーザーに知らせて、 ユーザーの決定に応じてインストールを続行するか終了しなければなりません。

VerInstallFileのエラーには、 修復可能なものもあります。修復可能なエラーの場合、 インストール プログラムは、 VIFF_FORCEINSTALLを指定してVerInstallFileをもう一度呼び出すことによって、 バージョンの問題にかかわらずファイルをインストールできます。VerInstallFileVIF_TEMPFILEを返し、 インストールを強行しないようにユーザーが指示したときは、 インストール プログラムは一時ファイルを削除してください。

エラーが以前になくても、 VerInstallFileがインストールを強行しようとしたときに修復不可能なエラーが発生する場合があります。たとえば、 インストール プログラムがインストールを強行しようとする前にほかのユーザーがファイルをロックする場合があります。修復不可能なエラーの後でインストール プログラムがインストールを強行しようとすると、 VerInstallFileは失敗します。インストール プログラムには、 このようなエラーから修復するためのルーチンがなければなりません。

どのようなエラーの場合も、 [Install]ボタン、 [Skip]ボタン、 [Install All]ボタンを持つコモン ダイアログ ボックスを表示してください。[Install All]ボタンが選択された場合、 インストール プログラムは、 それ以降VerInstallFileを使うときにVIFF_FORCEINSTALLオプションを指定して、 同様なエラーをユーザーに知らせないようにしなければなりません。修復不可能なエラーの場合は、 [Install]ボタンと[Install All]ボタンは使用不能にしてください。

ユーザーに取って有用なメッセージを表示するため、 インストール プログラムは、 通常、 重複するファイルのバージョン リソースから情報を取得します。ファイル インストール ライブラリには、 このための4つの関数 (GetFileVersionInfoSize GetFileVersionInfo VerQueryValue VerLanguageName関数) が用意されています。GetFileVersionInfoSizeは、 バージョン情報のサイズを返します。GetFileVersionInfoは、 GetFileVersionInfoSizeで取得した情報を使って、 バージョン情報を示す構造体を取得します。VerQueryValueは、 その構造体の特定のメンバを取得します。

たとえば、 VerInstallFileVIF_DIFFTYPEエラーを返した場合、 インストール プログラムは、 一時ファイルと転送先ファイルに対してGetFileVersionInfoSize関数、 GetFileVersionInfo関数、 VerQueryValue関数を呼び出して、 各ファイルの種類を取得しなければなりません。ファイルの言語が異なる場合、 インストール プログラムは、 VerLanguageNameを使って、 バイナリの言語識別子を言語のテキスト表現に変換しなければなりません (たとえば、 0x040Cは文字列Frenchに変換されます)

VerInstallFileVIF_ACCESSVIOLATIONなどのファイル エラーを返した場合、 インストール プログラムは、 GetLastError関数を使って最新のエラー値を取得しなければなりません。プログラムは、 この値をわかりやすいメッセージに変換して、 ユーザーに表示しなければなりません。また、 VerInstallFileの呼び出しとGetLastErrorの呼び出しの間では制御を譲渡しないでください。

ファイル インストール ライブラリ関数

ファイルのインストールに関する関数を次に示します。

GetFileVersionInfo

GetFileVersionInfoSize

VerFindFile

VerInstallFile

VerLanguageName

VerQueryValue

GetFileResource (使われなくなりました)

GetFileResourceSize (使われなくなりました)

▲ページトップに戻る

【本を読んでもよくらからない】 … 個別指導でわかりやすくお教えします
inserted by FC2 system