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

Rem*_*emy 11 c# windows wpf service

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

有人这样做过吗?
可能吗?

我们不需要与桌面或任何GUI进行交互,只需要一个可以通过GUI,命令行(可以正常工作)或作为服务运行的应用程序就可以了.

期待有趣的输入:-)

Sco*_*ain 15

作为经验法则,服务永远不应该有任何类型的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
}
Run Code Online (Sandbox Code Playgroud)

如果您刚启动该程序,它将作为服务启动(如果您从控制台运行它会对您大喊大叫),但如果您--console在启动时添加该参数,程序将启动并等待您按Enter键关.


Rem*_*emy 7

我们实际上解决了它并写了一篇关于它的小帖子:http :
//remy.supertext.ch/2011/11/a-wpf-project-running-from-the-cmd-prompt-or-as-a-service -and-has-a-gui/

也许它可以帮助某人。