2013-03-29 39 views
3

如何在程序中确定DLL是否为托管代码或非托管代码?我们使用this code来确保我们所有托管的DLL都是MSIL。但它在非托管DLL上引发异常,所以我需要一种方法来首先检查是否管理了一个DLL。如何以编程方式确定DLL是否被管理或不受管理?

+0

你多久做一次?有时你只需要处理异常并继续前进,我不知道是否有一种简单(异常)的方法来解决这个问题。 –

+0

@ScottChamberlain这是在构建过程中,所以不是一个大的时间命中。当代码按预期运行时,我只是不喜欢有异常。 –

+1

@DavidThielen有办法做到这一点,但它有点复杂,因为没有直接的API。就我个人而言,捕捉异常是我会采取的方法,因为它只是简单和更清洁... –

回答

4

最简单的选择很可能就是试图按照原样打开文件并捕获异常。任何非托管程序集都会在Assembly.LoadFrom上引发异常。

但是,如果您想要更严格地确定此问题,则需要自行检查PE标头以获取适当的信息。这article describes the process详细,但它需要检查DLL的PE头的IMAGE_OPTIONAL_HEADER结构。

+0

他们肯定不会那么容易他们:)谢谢 –

+0

@DavidThielen不 - 很遗憾,没有简单的API ,甚至在本土方面。 –

+0

@DavidThielen在你开始编码之前,请考虑所涉及的时间。如果处理异常可能会增加2ms到构建时间,而不是写出一种解析PE头的方法,只需要做一点数学运算(如果写入处理器的时间/异常处理和检测之间的时间差异)<构建的数量该计划的生命周期“不值得做。 –

相关问题