如何将我的C#winform程序转换为服务程序?

如何将我的C#winform程序转换为服务程序?,c#,winforms,service,C#,Winforms,Service,如何将我的C#winform程序转换为服务程序 我需要我的程序像服务一样工作(像监听器)windows服务没有GUI,因此谈论将带有GUI的WinForms应用程序转换为windows服务的唯一概念几乎没有意义。您可以阅读以下关于使用.NET的文章。如果您需要在给定端口上承载一些sevrice侦听,您可以查看。正如Darin已经指出的,在大多数情况下,将UI应用程序转换为Windows服务不是一个好主意。 话虽如此,在某些边缘情况下,这可能是有用的。 到目前为止,我还没有尝试使用WinForms

如何将我的C#winform程序转换为服务程序


我需要我的程序像服务一样工作(像监听器)

windows服务没有GUI,因此谈论将带有GUI的WinForms应用程序转换为windows服务的唯一概念几乎没有意义。您可以阅读以下关于使用.NET的文章。如果您需要在给定端口上承载一些sevrice侦听,您可以查看。

正如Darin已经指出的,在大多数情况下,将UI应用程序转换为Windows服务不是一个好主意。

话虽如此,在某些边缘情况下,这可能是有用的。
到目前为止,我还没有尝试使用WinForms应用程序来实现这一点,但我假设这些步骤与我以前所做的几乎相同。
我编写了一个后端应用程序,99.99%的时间作为Windows服务运行,但也可以作为控制台应用程序启动,以便更容易/更快地进行调试

你必须做的事情:

  • 防止应用程序生成多个实例(可选;关于如何实现此目的)
  • 确保您的应用程序不依赖于用户交互
  • 启动应用程序后,检查它是作为Windows服务运行还是以用户模式运行

您可以通过查询
Environment.UserInteractive
-来检测用户是否启动了应用程序,如果以Windows服务启动,则返回
false
,如果以用户模式启动,则返回
true

然后,您的主要方法应该如下所示:

    static void Main()
    {
        // do common initialization, logging framework + the likes

        if (Environment.UserInteractive)
        {
            // start up in user mode
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new myForm());
        }
        else
        {
            // start up as Windows service
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] 
            { 
                new myService() 
            };
            ServiceBase.Run(ServicesToRun);
        }
    }

您需要什么类型的侦听器,TCP、线程、Http/Web服务?????具体点。