从控制台应用程序 exe 在 DLL 中启动 WPF 应用程序

Posted

技术标签:

【中文标题】从控制台应用程序 exe 在 DLL 中启动 WPF 应用程序【英文标题】:Launch a WPF application in a DLL from a console application exe 【发布时间】:2016-03-10 23:17:58 【问题描述】:

目前我在同一个解决方案下有两个独立的 C# 项目,我们称之为 Window.exe 和 Console.exe。 Window.exe 是一个 WPF MVVM 应用程序,可以很好地独立运行。

为了消除一个小问题,我的目标是将Window.exe转换为Window.dll,然后使用Console.exe加载Window.dll。我尝试调用 App.Run(),或将 App_Startup 中的例程移动到用于启动主窗口的单独方法上并调用它。运行 Window.dll 的新线程无法真正持久。当我在调试中进入它时,它能够填充 GUI,但我无法与之交互。

关于我应该如何进行的任何想法?

【问题讨论】:

meta.stackexchange.com/questions/66377/what-is-the-xy-problem 【参考方案1】:

我可以通过做两件事来实现这一点:

    您需要将控制台应用程序中的 Main 方法标记为 STAThread 方法,因为 UI 需要位于 STA 线程上。否则,在调用主窗口的构造函数时会出现异常。

    确保在 Run() 之前还调用 InitializeComponent()。否则,应用程序将运行,但不会先设置窗口。

我能够让它在一个解决方案中工作,我也有一个 WPF 主应用程序和控制台应用程序来测试事物:

[STAThread]
static void Main(string[] args)

   WpfApp.App app = new WpfApp.App();
   app.InitializeComponent();
   app.Run();

【讨论】:

以上是关于从控制台应用程序 exe 在 DLL 中启动 WPF 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在程序启动之前添加然后从 C# 中提取 Dll? [复制]

从批处理脚本启动exe并在缺少dll时获取错误代码

HTTP请求流程

安全之路 —— 利用SVCHost.exe系统服务实现后门自启动

两个 exe 是不是可以从 DLL 访问内存中的同一个对象?

强制 Qt5 从 exe 目录加载 SSL dll