Мы создали исполняемый файл WPF.
Я хочу запустить этот исполняемый файл в дочернем домене приложения.
Таким образом, будет хост-домен AppDomain, называемый загрузчиком, который запускает приложение WPF в отдельном домене приложений.
Приложение WPF может инициировать для себя обновление, которое загружает новые файлы во временную папку, а затем должно подать сигнал загрузчику, чтобы выгрузить его и обновить dll / файлы WPF. После завершения обновления мы хотим перезапустить приложение WPF.
Итак, сначала мне нужно создать новый домен:
AppDomain wpfDomain = AppDomain.CreateDomain("WPF Domain");
wpfDomain.ExecuteAssembly(WPFAPP_PATH + "WpfApp.exe");
Теперь самое сложное - выяснить, как подать сигнал загрузчику о необходимости разгрузить приложение WPF и обновить его.
Я пытался обработать событие DomainUnload
. Он вызывается в домене WPF, поэтому я не могу перезапустить домен. Я получаю AppDomainUnloadedException
при попытке вызвать воссоздание домена приложения WPF и выполнить сборку.
Далее я прочитал, что выгрузка прерывает все потоки в домене, поэтому я попытался создать новый поток для домена WPF и присоединить к нему основной поток. Я позвонил AppDomain.Unload()
внутренне, когда обновления были загружены.
Сложность в том, что «родительский» (начальный загрузчик) AppDomain не знает, когда обновить и перезапустить дочерний AppDomain, но я не могу понять, как ребенок может аккуратно уведомить родителя и затем загрузить его. 1021 *
Мысли