【问题标题】:How to prevent local msmpi installation from loading system wide msmpi.dll如何防止本地 msmpi 安装加载系统范围的 msmpi.dll
【发布时间】:2021-07-09 11:53:58
【问题描述】:

我正在编写一个用于设置环境并使用 msmpi mpiexec.exe 启动(打开)各种 hpc 应用程序的 Windows 控制台应用程序。

我在本地安装了一个 msmpi 安装到我正在编写的应用程序。一切正常,并行处理正常。

但是,一旦我碰巧也安装了 msmpi (例如由 msmpisetup.exe 安装),我的应用程序就会顽固地加载 Windows/system32/msmpi.dll 而不是我使用 PATH 指出的 msmpi.dll。由于系统 msmpi.dll 版本不同,我的应用程序无法运行。

PATH env.var。是在我的应用程序中设置的,它显然是由子进程正确继承的,包括 mpiexec

我发现的唯一补救方法是 (1) 重命名 system32/msmpi.dll 或 (2) 放置“我的”msmpi.dll 的副本进入我有一个并行可执行文件的每个文件夹。两种疗法都……不好。

如何防止我的应用选择 system32/msmpi.dll 并改用 PATH 中的实例??

感谢您的建议。

没有

【问题讨论】:

    标签: environment-variables popen hpc cl ms-mpi


    【解决方案1】:

    Windows 中标准的 DLL 搜索顺序是documented

    1. 加载应用程序的目录。
    2. 系统目录。使用GetSystemDirectory函数获取该目录的路径。
    3. 16 位系统目录。没有函数获取这个目录的路径,但是搜索到了。
    4. Windows 目录。使用 GetWindowsDirectory 函数获取该目录的路径。
    5. 当前目录。
    6. PATH 环境变量中列出的目录。 请注意,这不包括由 App Paths 注册表项指定的每个应用程序的路径。计算 DLL 搜索路径时不使用 App Paths 键。

    如果您希望您的应用程序在使用系统位置之前先检查特定位置,您可以在 应用程序中调用 SetDllDirectory,然后让它执行需要特定 DLL 的其他二进制文件。

    【讨论】:

      最近更新 更多