C#在启动时记录任何缺少引用的DLL

时间:2016-01-19 20:19:38

标签: c# dll exception-handling reference

删除DLL文件后,应用程序会在Main方法之前崩溃。在Windows事件查看器中,它显示" ... System.IO.FileNotFoundException"。

如何在应用程序中处理此异常?

我现在的代码:

static void Main(string[] args)
    {        
        if (!File.Exists("PCSQL.dll")) 
        { 
            AppendLaunchErrorLog("*PCSQL.dll file doesn't exist*");               
            Environment.Exit(0); 
        }

        ...

2 个答案:

答案 0 :(得分:0)

我认为这样做的方法不是来自程序内部,而是来自一个单独的程序,它会检查这个,然后调用Main方法或触发这个程序。这个单独的程序可以捕获异常,因为它没有发生。

答案 1 :(得分:0)

由于这是通过P / Invoke机制调用的本机DLL,程序将一直有效,直到第一次调用在该DLL中实现的方法。

您可以捕获P / Invoke抛出的异常,然后对其做出任何其他异常(显示要使用的消息,记录错误,执行一些自定义logi等)。 好list of P/Invoke exception can be found in this answer

或者,您可以绕过P / Invoke并使用旧式WinAPI LoadLibraryGetProcAddress来调用DLL example here中的函数。没有例外,您必须手动检查函数的返回代码。

您也可以结合使用这两个方法,使用LoadLibrary检查DLL是否存在并且可以通过.NET加载,并使用P / Invoke与该DLL进行交互。