作为Windows服务运行WPF应用程序

我们正在开发一个Windows Presentation Foundation应用程序,我们希望能够作为Windows服务运行。

任何人做了这样的事情?
可能吗?

我们不需要与桌面或任何GUI进行交互,只需要一个可以使用GUI运行的应用程序,从命令行(运行)或作为服务即可。

期待有趣的input:-)

作为一个经验法则,服务不应该有任何一种UI。 这是因为服务通常以非常高的权限运行,如果您不太注意输入,就会发生不好的事情。 (我认为最新版本的Windows不会让你从服务中创建UI,但我不是100%确定的。)

如果您需要与服务进行通信,则应使用某种形式的IPC(WCF,管道,套接字等)。 如果你想要一个简单的控制台程序,也可以是一个服务,我知道一个窍门来设置:

class MyExampleApp : ServiceBase { public static void Main(string[] args) { if (args.Length == 1 && args[0].Equals("--console")) { new MyExampleApp().ConsoleRun(); } else { ServiceBase.Run(new MyExampleApp()); } } private void ConsoleRun() { Console.WriteLine(string.Format("{0}::starting...", GetType().FullName)); OnStart(null); Console.WriteLine(string.Format("{0}::ready (ENTER to exit)", GetType().FullName)); Console.ReadLine(); OnStop(); Console.WriteLine(string.Format("{0}::stopped", GetType().FullName)); } //snip } 

如果你只是启动程序,它将作为一个服务启动(如果你从控制台运行它,就会大声嚷嚷),但是如果你在启动的时候添加参数--console ,程序将会启动并等待你点击进入关闭。

不要这样做。 把所有的胆量写在一个引擎程序集中,然后从GUI和服务中引用它。 CLI可以是第三个可执行文件,也可以是服务可执行文件的重用。 关键是允许服务在没有任何引用WPF或WinForms或任何GUI框架的情况下运行。

我们实际上已经写出了一篇关于它的文章:
http://remy.supertext.ch/2011/11/a-wpf-project-running-from-the-cmd-prompt-or-as-a-service-and-has-a-gui/

也许它有助于某人。

如果你已经从命令行工作了,那么你已经有一半了。 有些应用程序只需要使用简单的标志名称,当您想要将应用程序作为服务运行时,请检查这些标志并相应地进行逻辑流程。 就像是:

 myapp.exe --runservice 

看一下这个。 这使任何可执行文件作为服务运行。

英文: http : //support.microsoft.com/?scid=kb;en-us;137890&x=7&y=13

法文: http : //support.microsoft.com/kb/137890

我的解决方案是添加一个主要输入功能,如:

 public static void Main() { ServiceBase.Run(new MyService()); } 

现在我们有两个应用程序启动项,一个用于WPF,一个用于Windows服务;

我们可以在Visual Studio中配置启动对象 – >项目属性 – >应用程序 – >启动对象。

所以设置入口和重建,你会得到你想要的。