C++dllを呼び出す32ビットの.Netアプリケーションwinformがあります。アプリをインストーラーにパッケージ化し、少なくとも20台程度のマシンにインストールして正常に実行します。このアプリは元々開発されており、Win 7 x64マシン(私のもの)で正常に動作します。
ただし、上司のデスクトップ(Win 7 x64)で実行すると、アプリケーションが起動しません。そうそう...
アプリケーションを起動しようとすると、JITダイアログが表示されます。
System.IO.FileNotFoundException:指定されたモジュールが見つかりませんでした。(HRESULTからの例外:0x8007007E)
私が実行すると、ボスマシンのexeに依存しますが、app exeはx86であると表示されますが、x64のすべての依存dllは、エラーとしてフラグを立てます。実行するときは、マシン上のアプリによって異なりますが、exeとdllはすべてx86とマークされています。
これはマシン間でどのように変わるのでしょうか?インストーラーは通常の方法で解凍してコピーするだけで、他の多くのx64マシンで正常に動作します...
当然、2時間離れた彼のマシンでしか壊れず、見本市が開催されます。はぁ。非常に混乱...
=================解決済み==================
そこで修正しました。欠落しているdllを見つけるのは少し注意が必要でした。
まず最初に、x64ボックスに対して間違ったバージョンのdependsを実行しました。そのため、アプリがx64dllを探していると誤って報告されていました。正しいバージョンを実行していれば、もっと早く問題を見つけられたと思います。
私たちにとってそれを解決したのは、システム内部からのプロセスモニターのログを見ることでした。すべてのファイルアクセスとレジストリの読み取りをログに記録します。ログには、Direct X11dllでの読み取りの失敗がすぐに示されました。
他のアプリの以前のインストーラーがDX11dllの一部をインストールしていたことが判明しました。これでインストーラーがだまされ、DirectX 11の手順がスキップされたため、dllが見つかりませんでした。
助けてくれてありがとう!