Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从DLL导入表获取用户导入的DLL_C#_Interop_Dllimport - Fatal编程技术网

C# 从DLL导入表获取用户导入的DLL

C# 从DLL导入表获取用户导入的DLL,c#,interop,dllimport,C#,Interop,Dllimport,我需要检查一个给定的dll,如果它所依赖的所有dll都存在。我能够使用此问题中给出的代码获取DLL列表:。它给出了dll列表,包括系统dll(如kernel32.dll和其他dll)。我需要的是从这个列表中删除它们,因为我不需要检查它们,我只需要检查开发人员显式导入的DLL 有什么办法吗?Windows DLL和“常规”DLL之间没有任何区别。程序员确实显式地创建了对它们的依赖,这并不是偶然发生的。你必须检查它们,它可能需要一个DLL,也就是说,只能在更高版本的Windows上使用 更严重的是,

我需要检查一个给定的dll,如果它所依赖的所有dll都存在。我能够使用此问题中给出的代码获取DLL列表:。它给出了dll列表,包括系统dll(如kernel32.dll和其他dll)。我需要的是从这个列表中删除它们,因为我不需要检查它们,我只需要检查开发人员显式导入的DLL


有什么办法吗?

Windows DLL和“常规”DLL之间没有任何区别。程序员确实显式地创建了对它们的依赖,这并不是偶然发生的。你必须检查它们,它可能需要一个DLL,也就是说,只能在更高版本的Windows上使用

更严重的是,您的方法在很多方面都无法可靠地工作。例如,您永远无法确定它何时使用Windows并行缓存中的DLL。您无法合理地从事分析清单的业务。DLL对其他DLL具有动态依赖关系而不是从IAT反向工程的静态依赖关系也是很常见的。例如,COM和.NET程序集都是如此


只有一种好方法可以确定是否存在所需的DLL。加载DLL。

Windows DLL和“常规”DLL之间没有任何区别。程序员确实显式地创建了对它们的依赖,这并不是偶然发生的。你必须检查它们,它可能需要一个DLL,也就是说,只能在更高版本的Windows上使用

更严重的是,您的方法在很多方面都无法可靠地工作。例如,您永远无法确定它何时使用Windows并行缓存中的DLL。您无法合理地从事分析清单的业务。DLL对其他DLL具有动态依赖关系而不是从IAT反向工程的静态依赖关系也是很常见的。例如,COM和.NET程序集都是如此


只有一种好方法可以确定是否存在所需的DLL。加载DLL。

谢谢。加载所需的DLL完全符合我的需要。但是,有没有办法在不搜索目录的情况下获取所需dll所在的路径?是的,该路径是您非常困难的地方。MSDN库在SetDllDirectory的文章中有一些关于Windows如何搜索DLL的文档。但这不处理基于清单的激活或动态DLL加载的情况。这两种都很常见,谢谢。加载所需的DLL完全符合我的需要。但是,有没有办法在不搜索目录的情况下获取所需dll所在的路径?是的,该路径是您非常困难的地方。MSDN库在SetDllDirectory的文章中有一些关于Windows如何搜索DLL的文档。但这不处理基于清单的激活或动态DLL加载的情况。这两种情况现在都很普遍。