C++ 复制到程序文件(x86)时无法执行我的DLL

C++ 复制到程序文件(x86)时无法执行我的DLL,c++,windows,dll,windows-security,C++,Windows,Dll,Windows Security,我有一个有趣的问题: 我编写的程序使用DLL。安装时,程序exe和DLL都位于c:\program Files x86\MyProduct下 通常加载的DLL是第三方驱动程序。出于测试目的,我用自己的实现替换了它。当我在program files文件夹中用我自己的DLL覆盖第三方DLL时,我的程序EXE无法启动DLL,LoadLibrarray返回0,GetLastError返回-529697949。现在,当我将整个MyProduct文件夹复制到,比如c:\temp并启动程序EXE时,可以加载D

我有一个有趣的问题:

我编写的程序使用DLL。安装时,程序exe和DLL都位于c:\program Files x86\MyProduct下

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

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

多谢各位

更新


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

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

- 529697949是0xE06D7363,是C++异常的异常代码。你需要源代码和调试器来找出抛出异常的原因。是的,我已经读过了,所以我认为ym DLL main抛出了一个未捕获的异常,但事实似乎并非如此。由于DLL是在程序启动时加载的,所以我认为在加载DLL之前很难将调试器附加到程序。由于在我将文件夹复制到程序文件之外时的有线行为,我猜我的问题是Windows安全特性。不,那个异常代码对于C++异常是高度特定的。Windows不会生成这样的值。某个地方有个程序员可以帮你解决这个问题,你在这里找到他的几率是零。拿起电话给他打个电话所以我想我必须附加调试器。问题是,我testwise实现了一个空的DllMain,但仍然收到了相同的结果。再加上DLL在不位于程序文件下时实际运行的事实,让我想到了一个安全特性。但我会给调试器一个机会…@HansPassant:他可能会收到一个忙信号。可能发生的情况是,您的代码在无法写入文件时引发异常。正是该异常阻止加载DLL。