いくつかのマネージドライブラリに依存するアプリがあります。これらのマネージドライブラリは、いくつかのアンマネージドライブラリに依存しています。
XPを実行しているマシンにアプリをデプロイすると、正常に実行されます。Vistaを実行しているマシンで同じことを行うと、DLLが見つからないという例外が発生します。
VS2010セットアッププロジェクトとNSISインストーラーの両方を試して展開を行いましたが、どちらの場合も同じです。
なぜこれが起こるのでしょうか?それを回避するために何ができますか?
更新-詳細
- 両方のインストーラーが.NET4.0のインストールを確認し、必要に応じてインストールします。
- Vistaコンピューターは64ビットですが、インストールは期待どおりにx86プログラムファイルフォルダーに転送されます
- どちらの場合も、私は管理者アカウントを持っています
- DLLは、実行可能ファイルと同じディレクトリに保持されます
- 私の知る限り、ファイルは正しいディレクトリにコピーされています
アップデート2
- 完全なエラーはhttp://pastebin.ca/2046487にあります
- DLLはAudiere.Net.dllで、これは私の1つであり、マネージドライブラリです。
そのエラーがAudiere.Net.dllを見つけることができないことを意味するのか、それとも依存関係の1つが見つからないためにロードできないのかはわかりません。
アップデート3-プロセスモニターからのもの
プロセスモニターを実行した後(Mehrdadに感謝します!)、ステータスが「SUCCESS」ではないエントリがいくつかあります。これらのいくつかは「NAMENOTFOUND」であり、いくつかは「PATHNOTFOUND」です。(デバッガーでのみ使用されていると思っていたPDBファイルを照会することもあります。)実際の障害につながる可能性のあるエントリを特定するのは非常に困難です。とにかく、誰かにとって何か意味がある場合に備えて、ログをアップロードしました(関連するパスを持つようにフィルタリングされています)。
アップデート4-.pdbファイルを追加
だから私はちょっと必死になって、インストーラーの出力に.pdbファイルを含めました。役に立たないと思いましたが、実際にはもっと便利なエラーになりました。単にDLLが見つからないと言うのではなく、BadImageFormatExceptionが発生するようになりました。これをグーグルで検索すると、これはx86でコンパイルされているがx64で実行されているバイナリの一般的な問題であることがわかります(Vistaマシンの場合と同様)。
推奨される解決策は、x86をターゲットにするように強制することですが、Audiere.Net.dllはすでにそうでした。ラップするライブラリに問題があるのでしょうか?