使用C#.Net内核在Worker服务内部运行我的UI应用程序(WPF应用程序)

使用C#.Net内核在Worker服务内部运行我的UI应用程序(WPF应用程序),c#,wpf,.net-core,windows-services,C#,Wpf,.net Core,Windows Services,我对使用.Net和C#编程是新手,正如标题中所说,我有一个WPF应用程序,可以在系统托盘图标中访问,我想用windows服务运行它 通常,我想要一个输出,就像在讨论中提供的答案中描述的那样 如果你想把它放在系统托盘里,我想你要做的就是把它变成一个Windows服务。我只写了1个Windows服务,那是几年前的事了,但我相信这是你必须要做的。如果我对编写Windows服务的看法是正确的,那么我建议您创建一个新的Visual Studio解决方案并向其中添加两个项目。一种是作为Windows服务运行

我对使用.Net和C#编程是新手,正如标题中所说,我有一个WPF应用程序,可以在系统托盘图标中访问,我想用windows服务运行它

通常,我想要一个输出,就像在讨论中提供的答案中描述的那样

如果你想把它放在系统托盘里,我想你要做的就是把它变成一个Windows服务。我只写了1个Windows服务,那是几年前的事了,但我相信这是你必须要做的。如果我对编写Windows服务的看法是正确的,那么我建议您创建一个新的Visual Studio解决方案并向其中添加两个项目。一种是作为Windows服务运行的DLL。第二个项目将是一个WPF项目,它将是用户与之交互的UI。然后,您必须使用一些消息传递系统在两者之间进行通信。对于模拟Outlook功能的操作消息,我使用了一些WPF toast消息来实现这一点。如果你使用Bing/Google“WPF toast popup”,你会得到很多结果

我在互联网上搜索了很多,找到了一些有用的答案,如:

不能直接启动,因为windows服务必须在机器启动时启动,而不是在用户登录时启动。服务也将在不同的上下文中运行,可能是作为不同的用户运行。您可以做的是编写一个单独的基于系统托盘的“控制器”,与服务交互

它需要一些努力才能实现。好的,只有两个提示:1)使用静态属性System.Environment.UserInteractive来检测应用程序运行的模式,请参见2)去掉app.xaml,因为它将在所有情况下强制启动WPF应用程序;相反,只在交互模式下显式创建并运行System.Windows.Application(或更好的,特殊派生类)的和实例,请参阅

而且,我不能执行他们的指示


提前谢谢

这可能会有帮助,但你应该澄清你的问题。谢谢@JackArnold。如果我从一个流行应用程序中选取一个例子,我会选择Microsoft Team,它在启动窗口的系统托盘图标中启动,它在后台永久工作,如果我单击启动图标,它将显示GUI。您需要创建Windows服务和Windows应用程序(Win32、WPF、WinForms)它有一个通知图标,允许它们通过命名管道或其他进程间通信方法进行交互。你需要学习所有这些。顺便说一句,如果你只想要一个带有通知图标的Windows应用程序,你不需要Windows服务。实际上我今天也在尝试解决同样的问题。我找到了2-3种解决方法,创建Windows服务似乎是最复杂的。如果您对其他想法持开放态度,请看一看,它采用Windows窗体本机功能,将应用程序作为托盘图标运行,并将其移植到WPF。