如果我的应用程序崩溃,是否调用Dispose()



我有一个场景,在应用程序崩溃,我必须清除某些注册表项。我正试图使用Dispose()模式。在垃圾收集期间应用程序崩溃的情况下,是否调用Dispose来清除注册表??

是否有其他模式来做这些活动?我不能使用未处理的应用程序处理程序,因为我要调用的代码不是由主应用程序直接引用的。我可以使用反射,但不确定这是不是正确的模式。

如有任何建议或经验,我将不胜感激。

听起来您想要为AppDomain.UnhandledException事件添加一个事件处理程序,做一些处理(在这种情况下写入注册表),然后让程序死亡。

假设你没有做任何奇怪的事情,比如将你的库加载到不同的AppDomain中,你应该能够以各种方式从你的库中挂钩它。在过去,我使用了静态构造函数,并从库中挂钩AssemblyResolve事件。

像这样:

public static class CrashHandler
{
    public static bool Initialized { get; private set; }
    [SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlAppDomain)]
    static CrashHandler()
    {
        AppDomain.CurrentDomain.UnhandleException += crash_handler;
        Initialized = true;
    }
    static void crash_handler(object sender, UnhandledExceptionEventArgs args)
    {
        // do your thing here
    }
}

为了让它实际启动,您需要至少在某处读取一次Initialized值。将它添加到一个库对象的构造函数中,您可以确定该对象将在早期实例化。

最新更新