一个可执行文件,它基于.NET中的命令行参数作为控制台或win32服务启动?

时间:2010-10-27 13:11:01

标签: .net executable

是否可以在.net中编写可执行的应用程序,可以注册为Win32服务并作为服务运行,但出于调试目的,可以作为控制台应用程序启动控制台输出(作为性能计数器,文本日志文件对于监测)

或者我应该将应用程序逻辑(Application类)放在一个单独的程序集中,并编写两个完全不同的可执行包装器(win32服务和控制台),用Application类引用这个库?

控制台

main()
{
  Application.Start();
  Console.Readkey();
  Application.Stop(); 
}

Win32服务

OnStart()
{
  Application.Start();
}

OnStop()
{
  Application.Stop();
}

2 个答案:

答案 0 :(得分:3)

是的我以前做过这个。我创建了一个windoes服务项目,在项目属性(从Windows应用程序)上将类型更改为Console Application并添加了基于命令行参数的条件:

/// <summary>
    /// The main entry point for the application.
    /// </summary>
    static void Main(string[] args)
    {

        // setup DI 
        BootStrapper.Setup();

        if (!Environment.UserInteractive)
        {
            ServiceManager serviceManager = new ServiceManager();
            serviceManager.Start();
        }
        else if(args.Length==1 && args[0]==HarnessGuid)
        {
            RunInHarnessMode();
        }
        else
        {
            ServiceBase[] servicesToRun = new ServiceBase[] { new ServiceManager() };
            ServiceBase.Run(servicesToRun);
        }       
    }

UserInteractive也可以做到这一点。

答案 1 :(得分:1)

Main()方法中检测您是否要作为控制台或服务运行。如果作为控制台运行,只需直接呼叫OnStart()即可。如果正在运行即服务,请致电Run()