我有一个调用 C++ dll 的 32 位 .Net 应用程序 winform。我们将应用程序打包到一个安装程序中,它可以在至少 20 台左右的机器上安装和运行良好。该应用程序最初是在 Win 7 x64 机器(我的)上开发并运行良好。
但是,当我在老板桌面(Win 7 x64)上运行它时,应用程序将无法启动。哦耶...
当我尝试启动应用程序时,我得到一个 JIT 对话框
System.IO.FileNotFoundException:找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)
当我运行依赖于老板机器上的 exe 时,它说应用程序 exe 是 x86,但所有依赖的 dll 都是 x64 并将其标记为错误。当我运行取决于我机器上的应用程序时,exe 和 dll 都标记为 x86。
这怎么会在机器之间发生变化?安装程序只是以正常方式解压缩和复制,并且可以在许多其他 x64 机器上正常工作......
自然它只会在两个小时外的他的机器上坏掉,我们还有一个贸易展。叹。很困惑...
=================解决==================
所以我们修复了它。找到丢失的 dll 有点棘手。
首先,我们搞砸了,我们为 x64机器运行了错误版本的依赖。所以它错误地报告应用程序正在寻找 x64 dll。如果我们运行了正确的版本,我想我们会更快地发现问题。
为我们解决的问题是从 System Internals中查看Process Monitor的日志。它记录每个文件访问和注册表读取。日志很快显示 Direct X 11 dll 读取失败。
事实证明,以前来自其他应用程序的安装程序已经安装了一些DX11 dll。这愚弄了我们的安装程序,它跳过了 DirectX 11 步骤,因此我们丢失了 dll。
谢谢你们的帮助!