0

我有一个有趣的问题:

我编写的程序使用 DLL。安装后,程序 exe 和 DLL 都在 c:\Program Files (x86)\MyProduct 下

通常加载的 DLL 是第 3 方驱动程序。出于测试目的,我将其替换为我自己的实现。当我在程序文件夹中用我自己的 DLL 覆盖第 3 方 DLL 时,我的程序 EXE 无法启动 DLL,LoadLibraray 返回 0 并且 GetLastError 返回 -529697949。现在,当我将整个 MyProduct 文件夹复制到 c:\temp 并启动​​程序 EXE 时,可以加载 DLL。

所以我想我的问题与 Windows 安全有关。程序和我的 DLL 版本都是用 C++ 编写的。我的用户帐户具有管理员访问权限,我是否以管理员身份执行程序似乎并不重要。有谁知道是否有可能阻止加载 DLL 的 Windows 保护机制?

谢谢

更新

我认为问题与我的 DLL 尝试写入 DLL init 函数中的执行目录有关。在 Program Files 目录中执行时,windows 不允许这样做。

4

1 回答 1

0

是的,我终于让它运行起来了。问题是我的 DLL 在 DLL 初始化期间试图写入 exe 文件夹。Windows 似乎检测到这一点并且 LoadLibrary 调用失败。

于 2015-12-22T16:06:08.953 回答