我们已经构建了一个WPF可执行文件。
我想在子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 Domain创建一个新线程并将主线程连接到它。我在下载更新时在内部调用了AppDomain.Unload()
。
难点在于“父”(引导加载程序)AppDomain不知道何时更新并重新启动子AppDomain,但我无法弄清楚子进程如何干净地通知父进程然后被卸载。< / p>
思想?
答案 0 :(得分:1)
回答你的原始问题:我能想到的一个解决方案是创建一个ManualResetEvent,你可以在退出时触发它。在加载器中,您有主线程等待此事件的信号。完成更新可执行文件并重新创建子域后,可以再次重置事件。