c# - 自更新 WPF 应用程序,启动器进程通过反射加载 WPF 应用程序
问题描述
在 Winforms 应用程序中,我们开发了一个自我更新的应用程序启动器,我正在尝试用 WPF 来模仿它,但遇到了一些问题。这与 Winforms 一起工作的方式:
- 启动器进程(不参考主应用程序)将检查更新的库并根据需要下载
- 然后,启动器将从 STA 线程加载程序集 (Assembly.Load),然后通过反射,在该程序集中调用 Init 方法(在启动器充当启动屏幕并显示进度时执行一堆初始化逻辑)
- Init 完成后,Laucher 将在加载的程序集中通过反射调用 Handoff 方法,该方法将使用新的 MainForm 创建一个新的 ApplicationContext,然后调用 Application.Run(newAppContext)。
- 启动器将关闭其窗口
我试图在 WPF 中模仿相同的内容,但我遇到的问题是:
- 似乎没有我可以将 MainForm 转移到的 ApplicationContext 的概念
- 我不确定如何处理 App.xaml/resources,因为我无法在应用程序 dll 中放置“第二个”App.xaml,所以我不确定如何处理资源/样式的加载
- 当我在通过反射调用的“Handoff”调用中显示新的 MainWindow 时,窗口会短暂打开但随后消失
感谢有关如何在 Wpf 应用程序中实现所需行为的任何指导。
解决方案
WPF 应用派生自 System.Windows.Application 的基类。VS 使用的基本模板创建了 App.xaml 和 App.xaml.cs。这个类有一个静态入口点
public static void Main()
这就是我使用的:
var type = yourloadedassembly.GetType( "YourNamespace.App" );
type.InvokeMember( "Main", BindingFlags::Public | BindingFlags::Static | BindingFlags::InvokeMethod, null, null, null );
推荐阅读
- r - 填充空数据框而不定义维度
- git - 拉取后如何取消Git Commit?
- google-bigquery - bigquery 中一年一周的滑动窗口聚合
- regex - 是否可以将字符串结尾“$”用作正则表达式捕获组?
- ruby-on-rails - 如何创建包含所有外键属性值的 activeadmin 下拉菜单表单输入
- django - 子模型的序列化
- python - python将字节转换为图像
- javascript - 使用 React JS 制作多页面 Web 应用
- c++ - 在 C++ 中创建文件夹
- sql-server - nvarchar 列查询到 varchar 列在 SQL Server 2017 中没有返回值