【问题标题】:How to transform console application to service application如何将控制台应用程序转换为服务应用程序
【发布时间】:2013-06-17 22:42:30
【问题描述】:

我正在尝试使用 C# 制作 Windows 服务。

我的问题是我只有 Visual Studio Express 2010,所以我无法生成“服务应用程序”。我的控制台应用程序正在运行,我使用 Inno Setup 将其安装为服务。

当然,服务没有启动。所以我的问题是,控制台应用程序和 Windows 服务之间的编码差异是什么 - 我必须做些什么才能使我的应用程序作为服务工作。

谢谢

【问题讨论】:

标签: c# windows-services


【解决方案1】:

我强烈建议您查看 TopShelf 将您的控制台应用程序转换为 Windows 服务。所需的代码更改非常少;本质上

public class Service
{
    public void Start() 
    {
         // your code when started
    }

    public void Stop() 
    {
         // your code when stopped
    }
}

public class Program
{
    public static void Main()
    {
        HostFactory.Run(x =>                                 
        {
            x.Service<Service>(s =>                    
            {
               s.ConstructUsing(name=> new Service());   
               s.WhenStarted(tc => tc.Start());            
               s.WhenStopped(tc => tc.Stop());           
            });
            x.RunAsLocalSystem();                          

            x.SetDescription("My service description");      
            x.SetDisplayName("ServiceName");                    
            x.SetServiceName("ServiceName");                   
        });                                                 
    }
}

然后从命令行安装它

service.exe install

【讨论】:

    【解决方案2】:

    我们使用以下方式:

    using System.ServiceProcess;
    using System.Diagnostics;
    using System;
    
    namespace MyApplicationNamespace
    {
        static class Program
        {
            static void Main(string[] args)
            {
                if (args != null && args.Length > 0)
                {    
                    switch (args[0])
                    {
                        case "-debug":
                        case "-d":
                            StartConsole();
                            break;
    
                        default:
                            break;
                    }
                }
                else
                {
                    StartService();
                }    
            }
    
            private static void StartConsole()
            {
                MyApp myApp = new MyApp();
                myApp.StartProcessing();
                Console.ReadLine();
            }
    
            private static void StartService()
            {
                ServiceBase[] ServicesToRun;   
                ServicesToRun = new ServiceBase[] { new MyApp() };
                ServiceBase.Run(ServicesToRun);
            }               
        }
    }
    

    MyApp 会继承自

    System.ServiceProcess.ServiceBase
    

    然后您可以使用以下命令安装服务

    installutil app.exe
    

    要从控制台运行,只需使用 -d 或 -debug 开关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多