パソコン活用研究ラピュタへの道(アセンブラ、DOS、Windows、旧型PCの活用研究)

アプリケーションの起動

市販のWindowsアプリケーションをインストール後、フォルダ名を変更したり、フォルダーを別のドライブ
や、他の場所に移動したりして、アプリケーションが起動できなくなったことがありませんか。
市販のアプリケーションのみならず、小規模なフリーソフトでも同様の現象がおこることがあります。
たいていは、OS(Windows)から「****を開くのに必要な、xxxx.dll ファイルが見つかりません」
というお叱りの言葉を頂くはずです。

エクスプローラで見てみると、その xxxx.dll ファイルは確かにあるのに、Windowsは見つからないと
ほざくことがあります。おい、しっかり探せよ!といいたいところですが、どうもWindowsには見つけられない
ようです。これは、先にも述べましたが、フォルダ名を変更したり、フォルダの位置を変更すると起きる
ことがあります。
それでは、これはいったいどういうことか、その原因をさぐりつつ、Windowsのアプリケーション起動の
秘密にメスを入れ、対策を考えてみたいと思います。

1 DLLファイル
Windowsのアプリケーション(実行ファイル)は、単独で起動できることもありますが、むしろそれはまれで
たいてい何らかのDLLファイル(拡張子 .dll のもの =ダイナミックリンクライブラリ)を必要とします。
あるいは、DLLファイル以外の関連ファイルを起動時に必要とするアプリケーションもあります。
起動の途中で、OSが必要なDLLファイルを見つけられないと、先述のエラーが表示されて、起動が途中で
STOPしてしまいます。

2 Windowsが探す場所
WindowsはどこにDLLファイルを探しにいっているのでしょうか。もちろん全てのドライブ、フォルダを探す
わけではありません。
いろいろ実験してみると、次の場所を探しに行くようです。
(1) c:\windows\system フォルダ(Win95/98/MEの場合)。いわゆるシステムフォルダ。
(2) アプリケーション(実行ファイル)のあるフォルダ。
(3) Dosコマンドの path でパスの設定されているフォルダ。
(4) レジストリの HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
   に path " " で設定されているフォルダ。

此れ以外に(特に昔のアプリケーションでは)、アプリケーションによっては、独自のINIファイルや
ENVファイルに必要なDLLファイルへのパスが記述されているケースもあります。

従って上記以外の場所に必要なDLLファイル(or その他必要なファイル)がある場合は、Windowsは
探し出すことができず、「ファイルが見つからない」というエラーを出します。
例えば、必要なDLLファイルを全てシステムフォルダ(c:\windows\system)に格納するアプリケーション
の場合は、インストール後にそのアプリーケーションのフォルダを移動したり、フォルダの名前を変えても
問題の発生する可能性は少ない(別の問題が発生する可能性はある)と言えますが、独自のフォルダを
作成してそこに、DLLファイルを置くようなアプリケーションの場合は、フォルダの移動、名前変更が即エラー
につながると言えるでしょう。


3 ケーススタディ1 一太郎 Ver6.3 の場合

(1) 一太郎の動作環境
おじさんの環境下(Dos/V)では、一太郎 Ver6.3 は、必要なDLLファイルのうちほとんどを、
C:\JUST\JSLIB に格納しています。唯一、jsftvec.dll のみが C:\Windows\System に置かれています。
そして、Autoexec.bat に path=C:\JUST\JSLIB という形でパスが記述されています。
このバージョンの一太郎は、レジストリ(\App paths)には、特にパスは記述していないようです。
また、いくつかENVファイルがあり、そこにもDLLファイルへのパスが記述されているようです。


(2) 実験
フォルダ名の変更
C:\JUST\JSLIB をC:\JUST\JSLIB32に変更します。
すると、「dllファイルがない」というエラーがでて、一太郎は起動できなくなります。

Path の追加
そこで、Autoexec.bat に Path=C:\JUST\JSLIB32 という記述を付け加えてみます。
すると、起動はできるが、編集作業領域ファイルを作成できないと表示されます。
とりあえず、一太郎は通常どうり使用可ですが、Pathの追加だけでは、完璧ではなく、他の環境設定ファイル
が一太郎の動作にからんでいるようです。


4 ケーススタディ2 (Visual BasIc 4)

皆様の中で、ダウンロードしてきたVBアプリが、DLLファイルがなくて動作しないということを、経験した人も
少なくないと思いますが、VBは、VB用のランタイムをはじめ、多くのDLL,OCXファイルを必要としますので
そのようなエラーが発生しやすいアプリです。

(1) VBアプリの動作環境
VB4で絶対に必要なのが、VB4用のランタイム vb40032.dll です。 これはシステムフォルダに置かれています。

(2) 実験
ランタイムの移動
vb40032.dll を まったく別のフォルダ C:\ftn に移動します。
ここで、VB4で作成したアプリを起動すると、「vb40032.dllが見つかりません」というエラーがでて、
起動不能になります。

Pathの追加
上記の状態で Autoexec.bat に Path=C:\ftn という記述を付け加えてみます。
ここで、VB4で作成したアプリを起動すると、プログラムは立ち上がりますが、表示が少しおかしくなります。
(一部の文字の文字化け等が発生)


レジストリーに登録
今度は、VB4で作成した DICE.exe というプログラムで
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\DICE.exe
に Path "C:\Program Files"
をレジストリエディタで作成します。
次に、Vb40032.dll を システムフォルダ(C:\windows\system)から C:\Program Files に移動してみます。
これで DICE.exe を起動すると、プログラムは動作するが上記の場合と同じように、文字化けが一部の
文字で発生し、表示がおかしくなります。

DLLファイルを実行ファイルと同じフォルダに移動。
Vb40032.dll をシステムフォルダから、実行ファイルと同じフォルダに移動します。
この場合は、問題なくVB4で作成したプログラムは動作します。


以上、同様のエラーが発生した時の参考になれば幸いです。

TopPage


inserted by FC2 system