我们构建了一个WPF可执行文件。从内部卸载AppDomain
我想在子AppDomain中启动此可执行文件。
因此,将有一个主机AppDomain称为引导加载程序,它在单独的AppDomain中启动WPF应用程序。
WPF应用程序可以触发自身的更新,将新文件下载到临时文件夹中,然后需要发信号通知启动加载程序卸载它并更新WPF dll /文件。更新完成后,我们要重新启动WPF应用程序。
首先,我需要创建一个新的域:
AppDomain wpfDomain = AppDomain.CreateDomain("WPF Domain");
wpfDomain.ExecuteAssembly(WPFAPP_PATH + "WpfApp.exe");
现在棘手的问题是搞清楚如何信号引导装载程序来卸载WPF应用程序和更新。
我试着处理DomainUnload
事件。它在WPF域中调用,所以我无法重新启动域。尝试调用重新创建WPF AppDomain并执行程序集时,我得到一个AppDomainUnloadedException
。
接下来我读取卸载放弃域中的所有线程,所以我尝试为WPF域创建一个新的线程并将主线程加入它。当更新被下载时,我在内部调用AppDomain.Unload()
。
难点在于“父”(引导加载程序)AppDomain不知道何时更新和重新启动子AppDomain,但我无法弄清楚孩子如何干净地通知父母然后卸载。
想法?
经过更多的研究,看来我需要调查MAF(托管加载项框架)。 – 2011-06-14 13:42:56