类似如上的一个可执行程序,虽然显示的使用 LoadLibrary 加载了动态库 "User32.dll",但是程序本身并没有使用该动态库中的任何函数,请问程序的运行时会真正加载该动态库? 动态库?dll? LoadLibrary??显示 [解决办法] 试想一下,假设你的程序用LoadLibrary加载某个库后并没有使用它,那么编译器可能会优化,所以那一句加载实际上是不存在的;但现在问题是:编译器如何知道你是否用到了该动态链接库呢?假设你的语句中有if语句,判断成功则调用动态链接库中的函数,失败则不调用,并且这个判断是由你在运行程序过程中输入值判断的,编译器是无法判断你是否会调用的,这也是为什么编译器没有在有一个new就必须有一个delete与之配对的这样的报错;因此我认为调用了LoadLibrary后只要是该库存在且尚未被加载,系统就一定会加载它,不知道你是否认可我的猜测。 [解决办法] 重命名必然会成功,不论该动态库是否正在被使用。 被使用中的动态库,exe都可以被重命名,但是不能被删除 [解决办法] http://technet.microsoft.com/zh-cn/sysinternals/bb896653 适用于 Windows 的 Process Explorer 10.21 版 作者:Mark Russinovich
发布日期: 2006年11月01日
简介您是否曾经想要了解某个程序打开了哪个特定文件或目录?现在您可以找到答案了。 Process Explorer 可显示有关进程已打开或加载哪些句柄和 DLL 的信息。
Process Explorer 的显示由两个子窗口组成。顶部窗口总是显示当前活动进程的列表(包括拥有它们的帐户的名称),而底部窗口中显示的信息取决于 Process Explorer 所处的模式:如果它处于句柄模式下,则可以看到顶部窗口中的所选进程打开的句柄;如果 Process Explorer 处于 DLL 模式下,则可以看到相应进程已经加载的 DLL 和内存映射文件。Process Explorer 还具有强大的搜索功能,可以快速显示哪些进程打开了哪些特定句柄或加载了哪些特定 DLL。
Process Explorer 的独特功能使其可用于跟踪 DLL 版本问题或句柄泄漏问题,还可以让用户深入了解 Windows 和应用程序的工作方式。
Process Explorer 可以在 Windows 9x/Me、Windows NT 4.0、Windows 2000、Windows XP、Server 2003、64 位版本的 Windows(用于 x64 和 IA64 处理器)和 Windows Vista 上运行。