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

本文关键字:引用 DLL 任何缺 记录 启动 | 更新日期: 2023-09-27 18:30:59

删除 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); 
        }
        ...

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

我相信这样做

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

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

您可以捕获 P/Invoke 抛出的异常,然后像对任何其他异常一样对其进行反应(显示要使用的消息、记录错误、执行一些自定义 logi 等)。P/调用异常的良好列表可以在此答案中找到。

或者,您可以绕过 P/Invoke 并使用老式的 WinAPI LoadLibraryGetProcAddress 来调用此处 DLL 示例中的函数。不会有例外,您必须手动检查函数的返回代码。

您还可以将这两个 aproache 结合起来,使用 LoadLibrary 检查 DLL 是否存在并且可以由 .NET 加载,并使用 P/Invoke 与该 DLL 进行交互。