我想找到给定 .NET 应用程序中使用的库的完整路径。
这些都是引用的程序集 (作为AssemblyName
s 获得) 和P/Invoke/DllImport
ed 函数 (仅作为 dll 名称获得)。
所以基本上我正在搜索这两种方法的内容,其中 executablePath
是第三方 .NET 应用程序的路径,它可能与我的程序完全不同。
static string ResolveAssemblyPath(AssemblyName name, string executablePath)
{
// ...
}
static string ResolveDllPath(string name, string executablePath)
{
// ...
}
重要的是,这些找到的库在确定其完整路径的过程中不执行任何代码!(DllMain
、模块初始化程序、 ...)
在任何情况下都可能吗?猜错了不是一个选项。
最佳答案
这是可能的,但您需要复制 windows 加载程序的搜索顺序,这对于 native 和托管模块,甚至是 windows 版本都是不同的。我已经在各种博客中看到它以不同级别的详细信息发布,但我手头没有。它似乎也记录在 MSDN 中。 ,所以看看这是否适合您。
无论如何,如果不能猜错,那你就有问题了,因为任何 future 的 Windows 版本都可以扩展或修改搜索顺序,所以你不会向上兼容 future 的 Windows 版本。
也有重定向 windows 加载程序的规则,例如。通过 list 或注册表,如果您想要准确的覆盖范围,您还必须复制它们。
关于c# - 解析 .NET 应用程序使用的库路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8196651/