« 振ってみまSHOW@題名の無い音楽会 | トップページ | DLLを読み込めないという問題(2) »

2010年9月26日 (日)

DLLを読み込めないという問題

今日はつくばチャレンジの試走会(走行実験)の日でした。参加する予定だったのですが、前日までにプログラムの不具合が解決できず、参加を見送りました。

その不具合というのは、開発用のPCでビルドしたプログラムを制御用のPC上で動かそうとすると、次のような例外が発生してしまうというものです。

”DLL 'UrgLibDLL.dll' を読み込めません。:このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより、問題が解決することがあります。

私はVisual Studio 2005でC#を使っています。指摘されたUrgLibDLL.dll はURGライブラリをC#から使えるようにVisual C++でDLL化したもので、これに何か問題があるようです。DebugモードでビルドしてもReleaseモードでビルドしても状況が変わらないので、おそらく、PCが違うせいでUrgLibDLL.dll が動作するために必要なDLLが欠落しているのではないかと予想しました。

ちなみに、開発用のPCはOSがWindows Vista Business (SP2)でブラウザにIE8を使っており、Visual Studio 2005が入っています。一方、制御用のPCはWindows XP HomeでブラウザはIE6、開発環境は入っていません。

DLLの依存関係を洗うためにはDependency Walkerを使うらしいので、Visual Studio 2005に入っているDepends.exe を起動して、UrgLibDLL.dll の依存関係を解析してみました。しかしここでもまた問題が発生。Dependency Walker は、ディレクトリ名に日本語が入っていると解析してくれないようです。これに気付くのにかなり時間がかかってしまいました。USBメモリに入れた後のDLLなら解析してくれたので、これはディレクトリ名に日本語があるとダメなツールなのではないなと気付きました。

Dependency Walker で解析してみた結果、IESHIMS.DLL が「指定されたファイルが見つかりません」となっていました。このファイルは、ブラウザ(IE8)から導入されたDLLで、セキュリティ上問題のあるDLLのようです

上記を踏まえて、解決策について考えてみました。

  1. UrgLibDll.dll自体はブラウザに依存する機能を使っていないので、DllNotFoundExceptionをプログラム中で無視してしまう。
  2. それでもだめなら、制御用PCにIE8を入れてみる。
  3. それでもだめなら、どうしよう??

1から順に試して、その結果をまたこのblogで報告します。

------

え~、上記の1,2をやってみましたが全然解決策になっていませんでした。どうも、犯人はIESHIMS.DLLではなくて、MSVCR80.DLLではないかという気がしてきました。というのも、UrgLibDLL.dll がMSVCR80.DLLを使用しているにもかかわらず、制御用PCの C:\WINDOWS\system32 ディレクトリには MSVCR80.DLL が見つからなかったからです。

それなら解決策はこうなるでしょうか。

  1. MSVCR80.DLLを制御用PCにインストールする。(再配布可能パッケージを使う)
  2. そもそもMSVCR80.DLLに依存しないようにする

どちらかというと後者のほうが簡単なので、Visual Studioのプロジェクトの設定を変更してUrgLibDLL.dllを作りなおしてみました。Dependency Walker で解析してみたところ、依存関係からMSVCR80.DLLが無くなっています。しかし、これは失敗でした。UrgLibDLLのテストプログラムが実行に失敗してしまいます。いや、それ以前に ReleaseモードでビルドしたUrgLibDLL.dll 自体がUrgLibDLLのテストプログラムで実行できないことがわかりました。

Release モードでビルドしたUrgLibDLL.dllが正しく動くよういろいろやってみましたが、解決の糸口が見つかりません。それなら先に前者の解決策を試してしまったほうが早そうです。そう思って、Microsoft Visual C++ 2005 再頒布可能パッケージ (x86)をインストールしてみたのですが、結果は一緒でした。

困ったな。

« 振ってみまSHOW@題名の無い音楽会 | トップページ | DLLを読み込めないという問題(2) »

コメント

かみやんさん、いつもコメントありがとうございます。

制御用PCにVC入れちゃうのは最後の手段ですね。

を。手ごわいですね。
1.再配布可能パッケージを使う
で普通行けそうなのにね。。
VCを制御PCにいれるとか?

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/167990/49570071

この記事へのトラックバック一覧です: DLLを読み込めないという問題:

« 振ってみまSHOW@題名の無い音楽会 | トップページ | DLLを読み込めないという問題(2) »

最近の写真