删除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);
}
...
答案 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 LoadLibrary
和GetProcAddress
来调用DLL example here中的函数。没有例外,您必须手动检查函数的返回代码。
您也可以结合使用这两个方法,使用LoadLibrary
检查DLL是否存在并且可以通过.NET加载,并使用P / Invoke与该DLL进行交互。