自更新 WPF 应用程序,启动器进程通过反射加载 WPF 应用程序

Self-updating WPF application, launcher process load WPF app via reflection

在 Winforms 应用程序中,我们开发了一个自我更新的应用程序启动器,我试图用 WPF 模仿相同的启动器,但遇到了一些问题。这与 Winforms 的工作方式:

我试图在 WPF 中模仿同样的东西,但我遇到的问题:

感谢任何关于我如何在 Wpf 应用程序中实现所需行为的指导。

WPF 应用派生自 System.Windows.Application 的基础 class。 VS 使用的基本模板创建一个 App.xaml 和 App.xaml.cs。此 class 的静态入口点为

public static void Main()

这是我用的:

var type = yourloadedassembly.GetType( "YourNamespace.App" );
type.InvokeMember( "Main", BindingFlags::Public | BindingFlags::Static | BindingFlags::InvokeMethod, null, null, null );

对于任何有趣的人来说,解决这个问题实际上是微不足道的:

  • 创建 Wpf 应用程序(启动器)
  • 创建一个 "Application" 程序集(可以是一个 dll)来托管应用程序特定代码的入口点
  • 让启动器动态加载应用程序集(Assembly.Load)
  • 在您的应用程序集中,有一些静态入口点可以通过启动器的反射调用。
  • 当启动器通过反射调用入口点方法时,添加您的资源并从应用程序程序集中新建一个 MainWindow 以分配给 Application.Current.MainWindow:

       Application.Current.Resources = new ResourceDictionary() {Source = new Uri("pack://application:,,,/MyApp.UI.Styling;component/Common.xaml")};
       Application.Current.MainWindow = new MainWindow();
       Application.Current.MainWindow.Show();
    
  • 回到启动器,Close()启动器window