我有一个 32 位应用程序,它使用其他人构建的 DLL,我们称之为 xyz.dll。此 DLL 依赖于其他几个旧 DLL。所有 dll 都保存在我的应用所在的同一文件夹中。我的应用程序编译正常,但在运行时,它会抛出错误"无法加载文件或程序集"xyz.dll"或其依赖项之一。不是有效的 Win32 应用程序">
我有 2 种解决方法似乎可以解决此问题。在第一个中,我将 DLL 移动到一个单独的文件夹,并创建了一个批处理文件来运行该应用程序。批处理文件首先将 dll 的路径添加到环境中,然后调用应用。有趣的是,如果我将dlls与应用程序放在同一个文件夹中,然后将其添加到路径中,它将不起作用。
第二种方法还将dll移动到文件夹,并将此路径添加到用户环境变量并直接运行exe。这些解决方案中的任何一个都需要额外的步骤,这对于应用部署来说并不理想。我想知道是否有更好的方法?
当您的 dll 与应用程序位于同一文件夹中时,应用程序尝试加载的是该 dll,正如您所说,这将失败。
将 dll 移动到另一个文件夹并将该文件夹的路径名添加到 PATH 环境变量时,应用程序将正常工作。在这种情况下,应用程序不会尝试加载已移动到另一个文件夹的 dll。如果是这种情况,它将失败。它必须加载 PATH 环境变量中某个文件夹路径中的另一个版本的 dll。
只需使用 Windows 搜索即可在计算机上查找 dll 文件的所有副本。您将能够确定另一个 dll 的位置。