C# 将WPF应用程序作为Windows服务运行 我们正在开发一个Windows演示基础应用程序,希望能够作为Windows服务运行。p>

C# 将WPF应用程序作为Windows服务运行 我们正在开发一个Windows演示基础应用程序,希望能够作为Windows服务运行。p>,c#,wpf,windows,service,C#,Wpf,Windows,Service,有人做过这样的事吗? 可能吗 我们不需要与桌面或任何GUI交互,只要有一个应用程序,我们可以通过GUI从命令行(工作)或作为服务运行就好了 期待有趣的输入:-)根据经验,服务不应该有任何类型的UI。这是因为服务通常以非常高的权限运行,如果您对输入不太小心,可能会发生不好的事情。(我认为最新版本的Windows根本不允许您通过服务创建UI,但我不能100%确定。) 如果需要与服务通信,则应使用某种形式的IPC(WCF、管道、套接字等)。如果您想要一个简单的控制台程序,它也可以是一个服务,我知道一个

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

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


期待有趣的输入:-)

根据经验,服务不应该有任何类型的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
,程序将启动并等待您按enter键关闭。

如果您已经让它从命令行运行,那么您已经成功了一半。有些应用程序只有简单的标志指定,当您想将应用程序作为服务运行时,可以使用这些标志,检查这些标志并相应地设置逻辑流。比如:

myapp.exe --runservice

看看这个。这使得任何可执行文件都可以作为服务运行

中文:


法语:

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

我们实际上已经解决了这个问题,并就此写了一篇帖子:


可能对某人有帮助。

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

public static void Main()
{
    ServiceBase.Run(new MyService());
}
现在我们有两个应用程序启动条目-一个用于WPF,另一个用于Windows服务

我们可以在Visual Studio中通过右键单击项目并选择
属性
->
应用程序
->
启动对象来配置启动对象


设置条目并重新生成将满足您的需要。

这对于CLI和服务很好。谢谢您的代码。为了理解桌面部分,我必须对服务进行更深入的研究。我也在考虑这个问题。听起来是个合理的解决方案。但是为什么引用WPF或WinForms是不好的呢?只要它只是一个引用?@Remy:静态引用在一开始就加载程序集。这是一个不错的建议,但我发现默认情况下最好让CLI作为服务运行。它简化了设置。