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);
}
...
我相信这样做
的方法不是来自程序内部,而是来自一个单独的程序,该程序将检查这一点,然后调用 Main 方法或触发该程序。这个单独的程序可以捕获异常,因为它没有发生。
由于这是通过 P/Invoke 机制调用的本机 DLL,因此程序将一直工作到第一次调用在该 DLL 中实现的方法。
您可以捕获 P/Invoke 抛出的异常,然后像对任何其他异常一样对其进行反应(显示要使用的消息、记录错误、执行一些自定义 logi 等)。P/调用异常的良好列表可以在此答案中找到。
或者,您可以绕过 P/Invoke 并使用老式的 WinAPI LoadLibrary
和 GetProcAddress
来调用此处 DLL 示例中的函数。不会有例外,您必须手动检查函数的返回代码。
您还可以将这两个 aproache 结合起来,使用 LoadLibrary
检查 DLL 是否存在并且可以由 .NET 加载,并使用 P/Invoke 与该 DLL 进行交互。