アプリケーションが参照するDLLファイル

Aragoが使用するDLLファイルは、OSにより探し方が異なるようです。

  カレント
ディレクトリ
\Windows
ディレクトリ
\Windows\System
ディレクトリ

\Windows\System32
ディレクトリ

現在タスクの
実行ファイルのある
ディレクトリ
環境変数Path
ディレクトリ
 
Windows3.1 1 2 3   4 5  
Windows95 2 4 3   1 5  
WindowsNT
Windows2000
2 5 4 3 1 6  
Windows XP 4 3 2 1   5  

ネットで調べたものを表にして見ました。

ここで問題なのは、XPの場合アプリケーションEXEと同じ場所にDLLを配置しておいても、windows配下の同名DLLを先に呼んでしまう事です。

読みの順番を変更することで解決するそうですが、かなり危険な方法かも知れません。

  1. <スタート>メニュー→<ファイル名を指定して実行>と選択。
  2. 「名前」に半角で「regedit」と入力し、<OK>ボタンをクリック。
  3. HKEY_LOCAL_MACHINE→SYSTEM→CurrentControlSet→Control→Session Managerとキーをたどって開く。
  4. <編集>メニュー→<新規>→<DWORD値>と選択し、名前を「SafeDllSearchMode」とする。
  5. 「SafeDllSearchMode」を開き、「値のデータ」に半角で「0」と入力し、<OK>ボタンをクリック。
  6. 作業が終了したら「レジストリエディタ」を終了させ、Windows XPを再起動する。

これで、検索順番がカレントフォルダ→System32→System→Windowsフォルダという順番に変更されました。元に順番に戻す時は値のデータを「1」にすればOKです。

 

もうひとつの方法として、インストールセットを作成する際に特定のEXEに対してのDLLを明示する方法があるそうです。XPは同一名称のDLLを同時に使用する(メモリー上に同名のDLLが複数読み込まれる)状態を許可しているそうなので、XP用のインストールセットを用意することで発展的解決となりそうです。

この方法に対応したソフトについては見つかり次第、ご紹介したいと思います。