检查系统中是否存在DLL

快速的问题。 我想知道在我的应用程序正在执行的系统中是否存在一个DLL

这在C#中可能吗? (可以在所有的Windows操作系统上运行?)

对于DLL我的意思是一个非.NET的经典的DLL(一个Win32的DLL)

(基本上我想做一个检查,因为我使用的DLL可能会或可能不会出现在用户系统上,但我不希望应用程序崩溃而没有警告,当这不存在:P)

调用LoadLibrary API函数:

 [DllImport("kernel32", SetLastError=true)] static extern IntPtr LoadLibrary(string lpFileName); static bool CheckLibrary(string fileName) { return LoadLibrary(fileName) == IntPtr.Zero; } 

我假设这是一个PInvoke电话?

如果是这样的话,最简单的方法是确定是否存在,就是调用并捕获如果文件不存在的异常。

 [DllImport("some.dll")] private static void SomeMethod(); public static void SomeMethodWrapper() { try { SomeMethod(); } catch (FileNotFoundException) { // Do Nothing } } 

其实它不会抛出FileNotFoundException

另外对于那个需要在多个地方检查路径的LoadLibrary

.net中有一个标准异常,它是从TypeLoadException派生的,即DllNotFoundException

最好的方法是在try..catch中包装方法/ PInvoke调用,并处理DllNotFoundException,因为.net将检查应用程序路径以及作为PATH OS环境变量一部分设置的任何其他路径。

 [DllImport("some.dll")] private static void SomeMethod(); public static void SomeMethodWrapper() { try { SomeMethod(); } catch (DllNotFoundException) { // Handle your logic here } }